Spring framework 常用注解
Spring Core Annotations
spring的核心注解。存在于sping framework的org.springframework.beans.factory.annotation和org.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.autoconfigure和org.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 | 一般,需要定制条件时才需要 |