@Enable***注解的使用方式和常用类型

简介: 观察下这些@Enable*注解的源码,可以发现所有的注解都有一个@Import注解。 @Import注解是用来导入配置类的,这也就是说这些自动开启的实现其实是导入了一些自动配置的Bean。 @Import注解导入配置方式的三种类型 第一类:直接导入配置类 @Target({ElementType.

观察下这些@Enable*注解的源码,可以发现所有的注解都有一个@Import注解。

@Import注解是用来导入配置类的,这也就是说这些自动开启的实现其实是导入了一些自动配置的Bean。

@Import注解导入配置方式的三种类型

第一类:直接导入配置类

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import({SchedulingConfiguration.class})
@Documented
public @interface EnableScheduling {
}

直接导入配置类SchedulingConfiguration,这个类注解了@Configuration,且注册了一个scheduledAnnotationProcessor的Bean

第二类:依据条件选择配置类

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AsyncConfigurationSelector.class)
public @interface EnableAsync {
    Class<? extends Annotation> annotation() default Annotation.class;
    boolean proxyTargetClass() default false;
    AdviceMode mode() default AdviceMode.PROXY;
    int order() default Ordered.LOWEST_PRECEDENCE;

}

AsyncConfigurationSelector通过条件来选择需要导入的配置类

AsyncConfigurationSelector的根接口为ImportSelector,这个接口需要重写selectImports方法,在此方法内进行事先条件判断。

若adviceMode为PORXY,则返回ProxyAsyncConfiguration这个配置类。

若activeMode为ASPECTJ,则返回AspectJAsyncConfiguration配置类。

第三类:动态注册Bean

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AspectJAutoProxyRegistrar.class)
public @interface EnableAspectJAutoProxy {
    boolean proxyTargetClass() default false;
}

AspectJAutoProxyRegistrar 实现了ImportBeanDefinitionRegistrar接口,ImportBeanDefinitionRegistrar的作用是在运行时自动添加Bean到已有的配置类,通过重写方法:

@Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry)

其中,AnnotationMetadata参数用来获得当前配置类上的注解;

BeanDefinittionRegistry参数用来注册Bean。

 

@EnableAspectJAutoProxy

@EnableAspectJAutoProxy注解 激活Aspect自动代理

<aop:aspectj-autoproxy/>

开启对AspectJ自动代理的支持。

@EnableAsync

@EnableAsync注解开启异步方法的支持。

http://blog.csdn.net/qq_26525215/article/details/53214185

@EnableScheduling

@EnableScheduling注解开启计划任务的支持。

http://blog.csdn.net/qq_26525215/article/details/53543816

@EnableWebMVC

@EnableWebMVC注解用来开启Web MVC的配置支持。

也就是写Spring MVC时的时候会用到。

@EnableConfigurationProperties

@EnableConfigurationProperties注解是用来开启对@ConfigurationProperties注解配置Bean的支持。

@EnableJpaRepositories

@EnableJpaRepositories注解开启对Spring Data JPA Repostory的支持。

Spring Data JPA 框架,主要针对的就是 Spring 唯一没有简化到的业务逻辑代码,至此,开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!

简单的说,Spring Data JPA是用来持久化数据的框架。

@EnableTransactionManagement

@EnableTransactionManagement注解开启注解式事务的支持。

注解@EnableTransactionManagement通知Spring,@Transactional注解的类被事务的切面包围。这样@Transactional就可以使用了。

@EnableCaching

@EnableCaching注解开启注解式的缓存支持

 

目录
相关文章
|
3月前
|
SQL 存储 测试技术
深入了解MyBatis-Plus中的枚举处理器及实例演示
深入了解MyBatis-Plus中的枚举处理器及实例演示
75 0
|
9月前
|
数据库
通用mapper(tk.mybatis) 使用Enum枚举类型字段的注意事项
通用mapper(tk.mybatis) 使用Enum枚举类型字段的注意事项
142 0
|
12月前
|
存储 JSON 缓存
看看人家在接口中使用枚举类型的方式,那叫一个优雅!上
看看人家在接口中使用枚举类型的方式,那叫一个优雅!上
看看人家在接口中使用枚举类型的方式,那叫一个优雅!上
|
12月前
|
存储 消息中间件 JavaScript
看看人家在接口中使用枚举类型的方式,那叫一个优雅!下
看看人家在接口中使用枚举类型的方式,那叫一个优雅!下
|
监控 Java 容器
字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》
在上一篇 「Helloworld」 中,我们初步尝试使用了 Javassist字节编程的方式,来创建我们的方法体并通过反射调用运行了结果。大致了解到创建在使用字节码编程的时候基本离不开三个核心类;ClassPool、CtClass、CtMethod,它们分别管理着对象容器、类和方法。但是我们还少用一样就是字段;CtFields,在这一章节中我们不止会使用字段,还会创建多个不同入参类型和返回值的学习。
352 0
字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》
|
JSON 安全 Go
GoFrame 通用类型变量gvar | 对比 interface{}
这篇文章将介绍 GoFrame 通用类型变量gvar的概念,对比 interface{}的特点;以及如何设置gvar的并发安全开关等基础使用;介绍序列化示例代码。
166 0
GoFrame 通用类型变量gvar | 对比 interface{}
|
Java
Java中的方法注意事项、通用格式及方法重载
方法注意事项、通用格式及方法重载的简单示例
61 0
Java中的方法注意事项、通用格式及方法重载
Java避坑指南:POJO类属性建议一律为包装类型,而且不要设置任何属性默认值
Java避坑指南:POJO类属性建议一律为包装类型,而且不要设置任何属性默认值
Java避坑指南:POJO类属性建议一律为包装类型,而且不要设置任何属性默认值
|
存储 Java 编译器
Java 8 新特性:扩展注解(类型注解和重复注解)
Java 8 新特性:扩展注解(类型注解和重复注解)
907 0
Java 8 新特性:扩展注解(类型注解和重复注解)
|
JavaScript 前端开发
使用Injection Token将字符串类型的参数注入到类的构造函数里
使用Injection Token将字符串类型的参数注入到类的构造函数里
110 0
使用Injection Token将字符串类型的参数注入到类的构造函数里

热门文章

最新文章