本篇介绍Spring Boot常用注解,但这些注解不一定是Spring Boot提供的,部分内容总结摘抄自《Spring Boot实战派》,仅作笔记。
@SpringBootApplication注解
@SpringBootApplication是Spring Boot的核心注解,其主要目的是开启自动配置。想要具体了解我们可以在启动类中打开此注解定义,打开后可以发现其被如下元注解修饰:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
下面逐一介绍以上元注解的作用:
- @Target:表明修饰注解的作用对象,下面是作用对象的所有的值以及它们代表的对象:
- ElementType.TYPE:接口,类,枚举,注解;
- ElementType.FIELD:字段,枚举常量;
- ElementType.METHOD:方法;
- ElementType.PARAMETER:方法参数;
- ElementType.CONSTRUCTOR:构造函数;
- ElementType.LOCAL_VARIABLE:局部变量;
- ElementType.ANNOTATION_TYPE:注解;
- ElementType.PACKAGE:包。
- @Retention:表明修饰注解的生命周期,下面是生命周期的值以及它们代表的周期:
- RetentionPolicy.SOURCE:注解只保留在源文件中,当该Java文件编译为class文件时,注解被遗弃;
- RetentionPolicy.CLASS:注解被保留到class文件中,当JVM加载此class文件时被遗弃,是默认声明周期;
- RetentionPolicy.RUNTIME:当JVM加载此class文件时,注解仍然存在。
- @Document:表明修饰注解的标记元素的信息将出现在javadoc中。
- @Inherited:表明修饰注解在使用时,如果注解在类上面,该类的子类会自动继承修饰注解。
- @SpringBootConfiguration:与@Configuration注解作用相同,将其修饰的类中的带有@Bean修饰的方法作为实例加入到Spring容器中。
- @EnableAutoConfiguration:借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IOC容器。其修饰的元注解如下:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class})
这里我们只需要关注其中两个注解@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})。@AutoConfigurationPackage作用是将主程序类所在的包及子包下的组件扫描到Spring容器中。@Import({AutoConfigurationImportSelector.class})的作用是将AutoConfigurationImportSelector导入到Spring容器中,AutoConfigurationImportSelector的作用是将所有符合条件的@Configuration配置都加载到当前IOC容器中。
-
@ComponentScan:自动扫描被注解修饰的类,默认扫描范围为该注解修饰的类所在的包以及子包的类。
Spring Boot常用注解
注解(annotations)用来定义一个类、属性或一些方法,以便程序能被编译处理,它相当于一个说明文件,告诉应用程序某个被注解的类或属性是什么,要怎么处理。注解可以用于标注包、类、方法和变量等。
Spring Boot的常用注解以及它们的用法如下:
- @RestController
作用在类上,作用相当于@ResponseBody和@Controller,用于返回JSON、XML等数据,但不能返回HTML页面。
- @Controller
作用在类上,用于标注控制器层,在MVC开发模式中代表C控制器,主要用于构建MVC模式的程序。
- @Service
作用在类上,用于声明一个业务处理类,标注服务层,处理业务逻辑。
- @Repository
作用持久层接口上,该注解除了将类标记为Bean外,它还可以将标记的类中抛出的数据访问异常封装为Spring的数据访问异常类型,在使用时需要在启动类上添加“@MapperScan("包名")”注解。
- @MapperScan
作用在Spring Boot项目的启动类上,用于将所有其指定的包下的所有接口在编译后生成实现类。使用该注解时,@Repository注解可以不用,在idea中虽然会提示该bean找不到,但不影响功能。当然最好两个都加上就没什么问题。
- @Component
作用在无法用@Service、@Controller、@Repository描述的Spring管理的类上,仅代表此类被Spring管理,相当于通用的注解。
- @Configuration
作用在类上,声明此类是一个配置类,常与@Bean配合使用。
- @Resource
作用在类名、属性或构造函数参数上,默认按照byName自动注入。
- @Autowired
作用在类名、属性或构造函数参数上,默认按照byType自动注入。
- @RequestMapping
作用在类名或方法上,用在类上则表示此Controller的所有响应请求的方法都是以该地址作为父路径的。
- @Transactional
作用在类名或方法上,用于处理事务。
- @RequestBody
作用在方法参数前,常用来处理application/json、application/xml等Content-Type类型的数据,意味着HTTP消息是JSON/XML格式,需将其转化为指定类型参数。
- @PathVariable
作用在方法参数前,将URL获取的参数映射到方法参数上。
- @Bean
作用在方法上,声明该方法的返回结果是一个由Spring容器管理的Bean。
- @ResponseBody
作用在方法上,通过适当的HttpMessageConverter将控制器中方法返回的对象转换为指定格式(JSON/XML)后,写入Response对象的body数据区。
- @Aspec
作用在入口类或普通类上,标注切面,可以用来配置事务、日志、权限验证,在用户请求时做一些处理等。
- @ExceptionHandler
作用在方法上,表示遇到这个异常就执行该方法。
- @Value
作用在属性上,用于获取配置文件中的值。
- @Scope
作用在类和方法上,用来标识Bean的作用域,作用域的值可以为如下几个:
- singleton:单例模式,全局有且仅有一个实例,默认就是此模式。
- prototype:原型模式,每次获取Bean的时候都会有一个新的实例。
- request:每一次HTTP请求都会产生一个新的Bean,并且该Bean仅在当前HTTP request内有效。
- session:每一次HTTP请求都会产生一个新的Bean,并且该Bean仅在当前HTTP session内有效。
- global session:类似于标准的HTTP session作用域,但其仅在基于portlet的web应用中才有意义。
- @Runwith
一个运行器,例如@RunWith(SpringJUnit4ClassRunner.class)就是让测试运行在Spring环境中,@RunWith(JUnit4.class)就是让Junit4运行。
- @WebFilter
作用在类上,标注这个类是一个过滤器。常用属性包括filterName(过滤器名称),urlPatterns(String[] URL匹配模式)。但此注解并不是Spring Boot提供的注解,而是Servlet3.0的规范,毕竟过滤器是依赖Servlet的,所以使用此注解时需要在启动类上添加@ServletComponetScan注解来扫描过滤器位置。
- @WebListener
作用在类上,标志这个类是一个监听器。此注解同样是Servlet规范,因此在使用时也需要在启动类上添加@ServletComponetScan注解来扫描监听器位置。