@Transactional
@ManagedResource@Component // Spring 模式注解@ComponentScan // 装配注解
@Configuration // Spring 模式注解
@Conditional@Profile@Indexed@Component
@Repository
@Service
@Controller
@Configuration@Import
@ImportResource
@ComponentScan@Autowired
@Qualifier- 元注解,即标注在注解上的注解,比如 @Target
- Spring 模式注解,比如 @Component
- Spring 组合注解,比如 @SpringBootApplication,
- Spring 注解属性别名,注解属性覆盖
- 显式别名示例:@ComponentScan,子注解提供新的属性方法引用父(元)注解中的属性方法
- 隐式别名示例:@SpringBootApplication
- 传递性别名
@SpringBootApplication,它组合了 @SpringBootConfiguration @EnableAutoConfiguration, 而 @EnableAutoConfiguration 注解中有 exclude 和 excludeName 两个属性
public @interface SpringBootApplication {
@AliasFor(annotation = EnableAutoConfiguration.class)
Class<?>[] exclude() default {};
@AliasFor(annotation = EnableAutoConfiguration.class)
String[] excludeName() default {};
}这里的意思就是说我显式的别名化我元标注(@EnableAutoConfiguration)上的属性,或者说 @SpringBootApplication 注解如果想要继承 @EnableAutoConfiguration 注解中的属性的话,可以用 @AliasFor 来表示。
public @interface SpringBootApplication {
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
}@ComponentScan 注解可以理解为 @SpringBootApplication 的父注解, 在子注解 @SpringBootApplication 中提供了一个新的属性 scanBasePackages 来引用父注解(元注解) @ComponentScan 中的 basePackages 的属性,有继承又有映射的意思在里面。这种方式就是隐式别名。
-
隐性覆盖 比如有两个注解 @One @Two 它们有两个同名称的属性比如 A, Two 注解标在 One 上(One 是 Two 注解的派生注解), 那么这时 One 注解上的 A 属性就会覆盖掉 Two 上面的A属性。
-
显性覆盖,这和 @AliasFor 有关系 一个元(父)注解上面的 B 属性被 AliasFor 之后,这时 A 属性就会显式的覆盖 B 属性。 也就是 A 注解 AliasFor B 之后,A 就会覆盖 B 相关的属性。A B 注解不一定要是有继承关系,可以 A B 就是同一个注解。
-
覆盖的传递性,类似注解属性别名的传递性。
| 框架实现 | @Enable 注解模块 | 激活模块 |
|---|---|---|
| Spring Framework | @EnableWebMvc | Web MVC 模块 |
| @EnableTransactionManagement | 事务管理模块 | |
| @EnableCaching | Caching 模块 | |
| @EnableMBeanExport | JMX 模块 | |
| @EnableAsync | 异步处理模块 | |
| @EnableWebFlux | Web Flux 模块 | |
| @EnableAspectJAutoProxy | AspectJ 代理模块 | |
| Spring Boot | @EnableAutoConfiguration | 自动装配模块 |
| @EnableManagementContext | Actuator 管理模块 | |
| @EnableConfigurationProperties | 配置属性绑定模块 | |
| @EnableOAuth2Sso | OAuth2 单点登录模块 | |
| Spring Cloud | @EnableEurekaServer | Eureka服务器模块 |
| @EnableConfigServer | 配置服务器模块 | |
| @EnableFeignClients | Feign客户端模块 | |
| @EnableZuulProxy | 服务网关 Zuul 模块 | |
| @EnableCircuitBreaker | 服务熔断模块 |
- AnnotationUtils