文章目录
一、前言
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 |