spring5的注解springboot2.x注解全系列总结
⽂章⽬录
⼀、前⾔
springmvc注解参考我之前发的⽂章。
本⽂涵盖所有常⽤和不常⽤的注解,为本⼈⼀点点归纳
⼆、jakarta.annotation-api-1.3.5.jar包下的注解
bean的注解版型。
注解应⽤
* @Component最普通的组件,可以被注⼊到spring容器进⾏管理
* @Controller作⽤于表现层(spring-mvc的注解),具有将请求进⾏转发,重定向的功能。
@Indexed为Component的基础注解,为Spring的模式注解添加索引,以提升应⽤启动性能。
* @Repository作⽤于持久层,具有将数据库操作抛出的原⽣异常翻译转化为spring的持久层异常的功能。
* @Service作⽤于业务逻辑层,是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层
2.1 @Autowired和@Resource的对⽐
@Autowired和@Resource都可以⽤来装配bean,都可以写在字段上,或者⽅法上。
@Autowired属于Spring2.5引⼊的,@Resource为JSR-250标准的注释,属于J2EE的。
共同点
@Resource和@Autowired都可以作为注⼊属性的修饰,在接⼝仅有单⼀实现类时,两个注解的修饰效果相同,可以互相替换,不影响使⽤。
不同点
@Resource是Java⾃⼰的注解,@Resource有两个属性是⽐较重要的,分是name和type;Spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型。所以如果使⽤na
me属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性时则使⽤byType⾃动注⼊策略。如果既不指定name也不指定type属性,这时将通过反射机制使⽤byName⾃动注⼊策略。
@Autowired是spring的注解,是spring2.5版本引⼊的,Autowired只根据type进⾏注⼊,不会去匹配name。如果涉及到type⽆法辨别注⼊对象时,那需要依赖@Qualifier或@Primary注解⼀起来修饰。
三、javax.annotation-api-1.3.2.jar包下的注解
注解应⽤
@Generated⽤来标注源代码中的某些东西是由某些⼯具⽣成的,⽽不是⼈写的。
@ManagedBean*
* @PostConstruct贴在⽅法上,标明 bean 创建完后调⽤此⽅法。
* @PreDestroy贴在⽅法上,标明容器销毁时调⽤此⽅法。
@Priority它有个int类型的属性value,可以配置优先级⼤⼩。数字越⼩的,就被优先匹配。
* @Resource以⽤来装配bean,默认使⽤byName⾃动注⼊策略。备注:@Autowired默认使⽤byType
⾃动注⼊策略。
@Resources多个Resource的集合
四、spring-beans-5.2.2.RELEASE.jar包下的注解
resource和autowired注解的区别注解应⽤
* @Autowired以⽤来装配bean,默认使⽤byType⾃动注⼊策略。备注: @Resource 默认使⽤byName⾃动注⼊策略@Configurable⼿动new出来的对象,正常情况下,Spring是⽆法依赖注⼊的,这个时候可以使⽤@Configurable注解@Lookup@Lookup注解的⽅法会告诉Spring,当我们调⽤这个⽅法时,Spring会返回⼀个⽅法返回值类型的实例。
* @Qualifier使⽤@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来消除歧义
* @Required检查⼀个Bean的属性的值在配置期间是否被赋予或设置, 解决@Autowired在项⽬启动时候注⼊为null报错* @Value通过注解将常量、配置⽂件中的值、其他bean的属性值注⼊到变量中,作为变量的初始值。
五、spring-boot-autoconfigure-2.2.2.RELEASE.jar包下的注解
注解应⽤
@AutoConfigurationPackage添加该注解的类所在的package 作为 ⾃动配置package 进⾏管理
@AutoConfigureAfter 在加载配置的类之后再加载当前类, ⼀般配合着@import注解使⽤ ,在使⽤import时必须要让这个类先被spring
ioc 加载好
—注意spring只对spring.factory⽂件下的配置类进⾏排序
@AutoConfigureBefore在加载配置的类之前再加载当前类
@AutoConfigureOrder对⾃动配置类进⾏排序
@EnableAutoConfiguration开启⾃动配置,将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使⽤的IoC容器。
—Spring Boot会⾃动根据你jar包的依赖来⾃动配置项⽬
@ImportAutoConfiguration@ImportAutoConfiguration是@Import的增强,限制了它使⽤的特定范围。
—@ImportAutoConfiguration与@EnableAutoConfiguration的功能更相似,⽽且能够更细粒度的控制导⼊的
类。
@SpringBootApplication @SpringBootApplication是⼀个复合注解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration
—以下所有注解都是 组合 @Conditional 注解@ConditionalOnBean当容器中有指定的 Bean 才开启配置。
@ConditionalOnClass当容器中有指定的 Class 才开启配置。
@ConditionalOnCloudPlatform当指定的云平台激活时才开启配置。
@ConditionalOnExpression当 SpEL 表达式为 true 时才开启配置@ConditionalOnJava当运⾏的 Java JVM 在指定的版本范围时才开启配置。
@ConditionalOnJndi当指定的 JNDI 存在时才开启配置@ConditionalOnMissingBean和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。
@ConditionalOnMissingClass和 @ConditionalOnMissingClass 注解相反,当容器中没有指定的 Class 才开启配置。@ConditionalOnNotWebApplication和 @ConditionalOnWebApplication 注解相反,当前项⽬类型不是 WEB 项⽬才开启配置。
@ConditionalOnProperty当指定的属性有指定的值时才开启配置。
@ConditionalOnResource当类路径下有指定的资源才开启配置。
@ConditionalOnSingleCandidate当指定的 class 在容器中只有⼀个 Bean,或者同时有多个但为⾸选时才开启配置。
@ConditionalOnWebApplication当前项⽬类型是 WEB 项⽬才开启配置。
注解应⽤六、spring-context-5.2.2.RELEASE.jar包下的注解
注解应⽤
* @Bean @Bean注解⽤于告诉⽅法,产⽣⼀个Bean对象,然后这个Bean对象交给Spring管理,需要在@Configuration注解下进
⾏创建
* @ComponentScan告诉Spring 哪个packages 的⽤注解标识的类 会被spring⾃动扫描并且装⼊bean容器。
* @ComponentScans⽤来指定spring注册bean的时候需要扫描的包或者类, 为@ComponentScan数组形式* @Conditional按照⼀定的条件进⾏判断,满⾜条件给容器注册bean
* @Configuration⽤于定义⼀个配置类
* @DependsOn表⽰⼀个bean A的实例化依赖另⼀个bean B的实例化
@Description—
@EnableAspectJAutoProxy在配置类上添加@EnableAspectJAutoProxy注解,开启注解版的AOP功能
@EnableLoadTimeWeaving运⾏时织⼊和装载时织⼊
@EnableMBeanExport JMX模块
@Import@Import注解把⽤到的bean导⼊到了当前容器中,注解是⽤来导⼊配置类或者⼀些需要前置加载的类@ImportResource通过@ImportResource实现xml配置的装载
@Lazy 容器⼀般都会在启动的时候实例化所有单实例bean 。如果我们想要 Spring 在启动的时候延迟加载 bean,即在调⽤某个
bean 的时候再去初始化,那么就可以使⽤ @Lazy 注解。
@Primary当注⼊bean冲突时,以@Primary定义的为准
@Profile指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
@PropertySource@PropertySource 注解加载指定的配置⽂件,@PropertySource(value = {“l”}
@PropertySources注解加载指定的配置⽂件,为 @PropertySource 的数组形式@Role配置⾓⾊,感觉没有啥⽤
@Scope配置作⽤@Scope默认是单例模式,singleton单例模式,prototype原型模式,request,session,global session
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论