SpringBoot注解速查
1. @SpringBootApplication
SpringBoot的启动注解:包含了@ComponentScan
、@Configuration
和@EnableAutoConfiguration
注解。
2. @ComponentScan
用于类或接口上,spring会把指定路径下带有指定注解的类自动装配到bean容器里。常见的注解有:@Controller
、@Service
、@Component
、@Repository
常用属性 | 功能 |
---|---|
basePackages、value | 指定扫描路径,如果为空则以@ComponentScan注解的类所在的包为基本的扫描路径 |
basePackageClasses | 指定具体扫描的类 |
includeFilters | 指定满足Filter条件的类 |
excludeFilters | 指定排除Filter条件的类 |
3. @Configuration
作用:用于定义配置类,替代spring的applicationContext.xml文件,完成spring容器的初始化。
4. @EnableAutoConfiguration
开启自动配置:尝试根据你添加的jar依赖自动配置你的Spring应用。
例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。
你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。
如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性exclude来禁用它们。
5. @Component、@Repository、@Service
组件注解,被这些注解修饰的类就会被Spring扫描到并注入到Spring的bean容器中。
注解 | 功能 |
---|---|
@Component | 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 |
@Repository | 注解在持久层中,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。 |
@Service | 一般用于修饰service层的组件,只是标注该类处于业务逻辑层。 |
6. @Resource、@AutoWired、@Qualifier、@Inject
注入注解。
注解 | 功能 |
---|---|
@Resource | @Resource(name="name",type="type") 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。 |
@AutoWired | 自动装配注解: 1. 可以在成员字段,setter 方法,构造函数中使用 2. 默认通过byType注入,如果有多个实现实例则会抛异常 3. 如果有多个实例,则用@Qulifier注解配合使用(@Qulifier(“bean名称”)) 4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。 |
@Qualifier | 当IOC容器中有多个接口实例时用于过滤所需的实例 1.和@Autowired配合使用 2.在@Bean修饰方法时注解形参 |
@Autowired 与 @Resource 的区别:
- @Autowired 与 @Resource 都可以用来装配bean,都可以写在字段上,或写在setter方法上。
- @Autowired 默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:
@Autowired(required=false)
,如果我们想使用名称装配可以结合@Qualifier注解进行使用
@Autowired()
@Qualifier("baseDao")
private BaseDao baseDao;
3、@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
7. @Controller
spring-mvc的注解,用于定义控制器类,具有将请求进行转发,重定向的功能,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层)
8. @ResponseBody
表示该方法的返回结果直接写入HTTP Response Body中,一般在异步获取数据时使用,用于构建RESTful的api。
比如异步获取json数据,加上@ResponseBody后,会直接返回json数据。
在使用@RequestMapping后,返回值通常解析为跳转路径,加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP Response Body中。
9. @RestController
该注解是 @Controller 和 @ResponseBody 的合集,表示这是个控制器Bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器。
10. @RequestMapping
是一个用来处理请求地址映射的注解,可用于类或方法上。
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
属性 | 功能 |
---|---|
value | 指定请求的实际地址,指定的地址可以是URI Template 模式 |
method | 指定请求的method类型, GET、POST、PUT、DELETE等 |
consumes | 指定处理请求的提交内容类型(Content-Type),如application/json,text/html。 |
produces | 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。 |
params | 指定request中必须包含某些参数值时,才让该方法处理。 |
headers | 指定request中必须包含某些指定的header值时,才能让该方法处理请求。 |
11. @RequestParam:
接收普通参数,用在方法的参数前面,将请求参数绑定到你控制器的方法参数上。
属性 | 功能 |
---|---|
value | 参数名 |
required | 是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就异常。 |
defaultValue | 默认参数值,如果设置了该值,required=true将失效,自动为false;如果没有传该参数,就使用默认值。 |
12. @PathVariable
路径变量,接收请求路径中占位符的值,可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable("xxx")
。
13. @RequestBody
接收来自requestBody的参数,一般用于处理非 Content-Type: application/x-www-form-urlencoded 编码格式的数据,比如:application/json、application/xml 等类型的数据。
14. @Import
用来导入其他配置类。
15. @ImportResource
用来加载xml配置文件。
16. @Value
注入Spring boot application.properties配置的属性的值。
17. @Bean
产生一个bean,并交给spring管理;相当于XML中的
18. @ControllerAdvice
统一处理异常。
19. @ExceptionHandler(Exception.class)
用在方法上面表示遇到这个异常就执行以下方法。
20. @RepositoryRestResourcepublic
设置rest请求路径。通过匹配路径中的参数完成对数据库的访问。配合spring-boot-starter-data-rest使用。
21. @ConfigurationProperties
配置属性注解,用于读取springboot的配置文件属性。
22. @PropertySource
加载配置文件注解,用于加载 .properties 配置文件。
23. @ImportResource
加载配置文件注解,用于加载 .xml 配置文件。