spring注解整理
1、jakarta.annotation-api-1.3.5.jar包下的注解
| 注解 | 应用 |
|---|---|
| @Component | 最普通的组件,可以被注入到spring容器进行管理 |
| @Controller | 作用于表现层(spring-mvc的注解),具有将请求进行转发,重定向的功能。 |
| @Indexed | 为Component的基础注解,为Spring的模式注解添加索引,以提升应用启动性能。 |
| @Repository | 作用于持久层,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。 |
| @Service | 作用于业务逻辑层,是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层 |
2、javax.annotation-api-1.3.2.jar包下的注解
| 注解 | 应用 |
|---|---|
| @Generated | 用来标注源代码中的某些东西是由某些工具生成的,而不是人写的。 |
| @ManagedBean | * |
| @PostConstruct | 贴在方法上,标明 bean 创建完后调用此方法。 |
| @PreDestroy | 贴在方法上,标明容器销毁时调用此方法。 |
| @Priority | 它有个int类型的属性value,可以配置优先级大小。数字越小的,就被优先匹配。 |
| @Resource | 以用来装配bean,默认使用byName自动注入策略。备注:@Autowired默认使用byType自动注入策略。 |
| @Resources | 多个Resource的集合 |
3、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的属性值注入到变量中,作为变量的初始值。 |
4、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 |
| @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 项目才开启配置。 |
5、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 |
6、Spring-MVC
| 注解 | 应用 |
|---|---|
| @ControllerAdvice | 这是一个增强的 Controller,实现三个方面的功能:全局异常处理、全局数据绑定、全局数据预处理 |
| @CookieValue | 从Http请求头中的Cookie提取指定的某个Cookie. |
| @CrossOrigin | 注解解决细粒度的配置跨域 |
| @DeleteMapping | delete请求方式 + RequestMapping 处理请求地址映射的注解 |
| @ExceptionHandler | 注解用来指明异常的处理类型,经常用于配合@ControllerAdvice使用 |
| @GetMapping | get请求方式 + RequestMapping 处理请求地址映射的注解 |
| @InitBinder | 通过传统表单post数据到后端的controller时候,数据类型的自动转换 |
| @Mapping | @RequestMapping的基础注解 |
| @MatrixVariable | 这个注解的出现拓展了URL请求地址的功能。使用矩阵变量绑定参数的 |
| @ModelAttribute | 用于处理model的,被@ModelAttribute注释的方法会在此controller每个方法执行前被执行 |
| @PatchMapping | Patch请求方式 + RequestMapping 处理请求地址映射的注解,Patch方式是对put方式的一种补充 |
| @PathVariable | 注解主要用来获取 URL 路径参数,"/user/{id}") … @PathVariable Integer id |
| @PostMapping | Post请求方式 + RequestMapping 处理请求地址映射的注解 |
| @PutMapping | Put请求方式 + RequestMapping 处理请求地址映射的注解 |
| @RequestAttribute | 同理使用API调用的方式(ServletRequest.getAttribute())来达到目的 |
| @RequestBody | 注解用于接收前端传来的实体,接收参数也是对应的实体 |
| @RequestHeader | @RequestHeader注解用来获取请求头 |
| @RequestMapping | 处理请求地址映射的注解, 非常重要的注解 |
| @RequestParam | 也是获取请求参数的,user?id=1 … @RequestParam Integer id |
| @RequestPart | @RequestPart这个注解用在multipart/form-data表单提交请求的方法上 |
| @ResponseBody | 将java对象转为json格式的数据,发送到前端,注意跟 @RequestBody区别 |
| @ResponseStatus | 处理响应的状态,有两个参数,value属性设置异常的状态码,reaseon是异常的描述 |
| @RestController | 该注解也是非常重要的,@RequestBody + @RequestMapping 两个重要的注解的结合 |
| @RestControllerAdvice | 由@ControllerAdvice、@ResponseBody组成,主要是用来做统一异常处理返回JSON数据的 |
| @SessionAttribute | 同理使用API调用的方式HttpSession.getAttribute(),标注在方法的参数上,读取session中的数据 |
| @SessionAttributes | 标注在类上,向session中添加数据,暂时的传递,不是长期的保存,长期保存的数据还是要放到Session中 |
@Autowired和@Resource的对比
- 共同点
@Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上。
@Resource和@Autowired都可以作为注入属性的修饰,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。
- 不同点
@Autowired属于Spring2.5引入的,@Resource为JSR-250标准的注释,属于J2EE的。
@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注解一起来修饰。
整理参考:https://blog.csdn.net/qq_34168515/article/details/106844962
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

浙公网安备 33010602011771号