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

posted @ 2021-06-11 12:16  小天儿  阅读(394)  评论(0)    收藏  举报