Spring framework 常用注解

Spring Core Annotations

spring的核心注解。存在于sping framework的org.springframework.beans.factory.annotationorg.springframework.context.annotation的包下面

注解 使用范围 常用参数 描述 备注
@Autowired field、method、contructor、parameter required: Boolean 是否必须 依赖注入。根据类型和名字来注入bean
@Bean class、method name/value: String 标记是个Bean 如果在method上,则该类必须用@Configuration标记
@Qualifier field、class、method、parameter name/value: String 限定的bean名字 配合@Autowired使用,通过bean id或者name来限定具体注入的对象
@Primary class、method 在有多个相同类型的bean时,优先选择该对象 和@Qualifier一样都是帮助spring选择要注入的bean的,@Qualifier是在要注入的地方使用,@Primary是在被注入对象上声明
@Value field、method、parameter value: String 注入一个值,可以使用SpEL,从配置文件中读取
@DependsOn class、method value: String 依赖的bean名 实例化该对象时需要隐式依赖其他的对象 典型的像JDBC的driver或者静态对象
@Lazy class、method、constructor、parameter、field value: Boolean 是否延迟加载 在需要的时候才实例化 默认spring会在启动时实例化扫描到的所有bean
@Scope class、method value/scopeName: String scope名字 对象的scope 默认spring的注入bean的scope是单例。可以设置为prototype:每一个都不同,在springmvc里还可以有request、session等特定的类型
@Profile class、method value: String[] profile名字数组 在列表中激活的profile才会使用该对象(@Bean或@Component)
@Import class value: class[] 导入的类名 手动导入的配置对象等 在没有被scan到时,可以使用该注解手动导入
@ImportResource class value/locations: String[] 导入的xml配置路径 要导入的xml配置文件的路径,配合@Configuration使用
@PropertySource class value: String[] 导入的配置名
ignoreResourceNotFound: Boolean 当没找到时忽略
encoding: String 配置文件编码
手动导入的配置资源文件,配合@Configuration使用 可重复使用
默认spring是会从src/main/resources下面读取application.properties(.yml)来作为配置文件的,可以通过该注解导入其他配置资源文件

Spring Bean Annotations

spring声明bean的注解。在org.springframework.stereotype包下,有几个不同用途的注解,用来声明需要注入到ApplicationContext中的bean。在应用声明了@ComponentScan注解后,spring会自动扫描带有这些注解的类来初始化不同的bean。

注解 使用范围 常用参数 描述 备注
@ComponentScan class    basePackages/value: String[] 要扫描的包 标记需要扫描的包,帮助spring更快的找到依赖 这个注解不是用来声明bean的,是个helper类型的注解
@Component class value: String bean的名字 声明这是个bean类 value用来声明bean的别名,默认用首字母小写的类名作为名字。spring会自动扫描带有该注解的类作为bean
@Repository class value: String bean的名字 声明这是个数据层的bean类 @Component的别名注解。目的是为了区分这是用于数据层的bean。另外,spring会自动转换该类的中的exception为spring的DataAccessExeption
@Service class value: String bean的名字 声明这是个业务逻辑层的bean类 @Component的别名注解。目的是为了区分这是用于业务逻辑层的bean
@Controller class value: String bean的名字 声明这是个spring mvc中的controller的bean类 @Component的别名注解。目的是为了区分这是用于控制层的bean
@Configuration class value: String bean的名字 声明这个类中含有@Bean注解的方法用来生成bean对象 @Component的别名注解。目的是为了标记该类可以生成其他bean

Spring Web Annotations

spring中和web相关的注解。位于org.springframework.web.bind.annotation包下。

注解 使用范围 常用参数 描述 备注
@RequestMapping class、method value/path: String[] 映射的路径
method: RequestMethod[]: 请求的方法列表
声明一个api接口 必须在@Controller注解声明的类下,@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping都是变体
@RequestBody parameter required: Boolean 是否必须 将请求的body映射到这个参数上 反序列化依赖是spring根据content-type自动处理的
@PathVariable parameter required: Boolean 是否必须
name/value: 参数名字
将请求路径上的某部分映射到这个参数上 在REST API上很有用
@RequestParam parameter required: Boolean 是否必须
name/value: String 参数名字
defaultValue:默认值
将请求的query参数映射到这个变量上 类似的还有@CookieValue @RequestHeader
@ResponseBody method、class 将该方法返回的结果映射到返回的数据上 以JSON格式序列化返回的对象,如果声明在@RestController中,则无需声明这个注解会自动进行JSON序列化
@ExceptionHandler method value: class[] 捕获的异常类型 声明一个自定义的的异常处理器 捕获的异常会作为参数传入该方法中
@ResponseStatus method、class code/value: HttpStatus
reason: String http message
声明该接口返回的http status code


其他的,如@RestController@Controller@ResponesBody的结合体;@CrossOrigin可以允许跨域访问该接口等。

Spring Boot Annotations

由于spring有很多的配置项,如果手动去配置容易出错。所以spring boot 提供了自动化配置的功能。下面的注解位于org.springframework.boot.autoconfigureorg.springframework.boot.autoconfigure.condition下。

注解 使用范围 常用参数 描述 备注
@SpringBootApplication class scanBasePackages: String[] 是@ComponentScan里参数的别名 @Configuration @EnableAutoConfiguration @ComponentScan 三个注解的结合体 一般应该位于程序的入口main函数所在类上
@EnableAutoConfiguration class exclude: class[] 自动配置排除的类 标记启用自动化配置 启用这个注解后,spring自动在classpath中寻找beans并将其注入需要的对象中


条件注解:当条件满足时才引入。和@Configuration @Bean一起使用,表示当某一个条件满足了才会引入该bean。

注解 使用范围 常用参数 描述 备注
@ConditionalOnClass
@ConditionalOnMissingClas
class、method value: class[] 要匹配的类 当classpath中有(没有)相应的类时才加载该bean
@ConditionalOnBean
@ConditionalOnMissingBean
class、method name: String[] 要匹配的bean名字 当classpath中有(没有)相应的bean时才加载该对象
@ConditionalOnProperty class、method name: String[] 要匹配的属性名字
havingValue: String 需要的值
当加载的属性中有该属性和值时才加载该bean
@ConditionalOnResource class、method resources: String[] 要匹配的资源名字 当classpath中有该资源时才加载该bean
@ConditionalExpression class、method value: SpEL表达式 当SpEL表达式满足时才加载该bean
@Conditional class、method value: Condition[] 当指定的条件达成时才加载bean 一般,需要定制条件时才需要