spring5的注解springboot2.x注解全系列总结

文章目录

  • 一、前言
  • 二、jakarta.annotation-api-1.3.5.jar包下的注解
    • 2.1 @Autowired和@Resource的对比
  • 三、javax.annotation-api-1.3.2.jar包下的注解
  • 四、spring-beans-5.2.2.RELEASE.jar包下的注解
  • 五、spring-boot-autoconfigure-2.2.2.RELEASE.jar包下的注解
  • 六、spring-context-5.2.2.RELEASE.jar包下的注解

一、前言

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的类型。所以如果使用name属性,则使用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包下的注解

注解 应用
* @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 = {“classpath:user.yml”}
@PropertySources 注解加载指定的配置文件,为 @PropertySource 的数组形式
@Role 配置角色,感觉没有啥用
@Scope 配置作用@Scope默认是单例模式,singleton单例模式,prototype原型模式,request,session,global session

你可能感兴趣的:(spring,springboot)