🎃 常用注解
2022年10月10日
- frame
🎃 常用注解
1. MVC 业务组件
@Controller
@RestController
@Service
@Repository
@Configuration
@Component
@ComponentScan
2. 处理外部请求
@RequestMapping
@RequestBody
@RequestParam
@PathVariable
@ResponseBody
3. 自动装配获取 bean
@Autowired
@Primary
@Qualifier
- Spring 注解,只适用于 Spring 框架
- 首先根据
byType
自动装配 - 如果根据
byType
找到多个满足条件的 bean,则需要使用@Qualifier
|@Primary
进行区分,- 否则根据
byName
查找,若仍然无法区分,此时抛异常 @Primary
解决在同一接口有多个实现时,优先选择@Primary
注解修饰的 bean
- 否则根据
Resource
- Java 标准,支持绝大部分框架
- 默认
byName
自动装配 - 如果指定了 name,则用
byName
自动装配,如果指定了 type,则用byType
自动装配 - 装配顺序
@Target({TYPE, FIELD, METHOD}) // 类,字段,方法
@Retention(RUNTIME)
public @interface Resource {
String name() default "";
Class<?> type() default java.lang.Object.class;
// ...
}
@Bean
- 指示一个方法生成一个由 Spring 容器管理的 bean。
@Bean
方法也可以在未使用@Configuration
注释的类中声明。- 例如,bean 方法可以在
@Component
类中声明,甚至可以在普通的旧类中声明。在这种情况下, @Bean 方法将以所谓的 “精简”模式 进行处理
- 例如,bean 方法可以在
- 可以与
@Scope
、@Lazy
、@DependsOn
和@Primary
注解一起使用来声明这些语义 - 可装配 任意的 bean,尤其适合装配那些初始化过程十分复杂的 bean
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) // 作用于 方法
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
@AliasFor("name")
String[] value() default {};
@AliasFor("value")
String[] name() default {};
// 在初始化期间调用 bean 实例的方法的可选名称。不常用,因为可以直接在 Bean 注释方法的主体内以编程方式调用该方法。
String initMethod() default "";
// 在关闭应用程序上下文时调用 bean 实例的方法的可选名称,例如 JDBC DataSource 实现上的 close() 方法
String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}