本文归纳总结了在使用SpringBoot进行开发中常用到的注解以及作用。
1、@SpringBootApplication
@SpringBootApplication 注解是SpringBoot中的核心注解,它是一个复合型注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。
这三个注解的作用分别是:
@SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。返回值就是类型。让我们再也不用注册文件,只需要在配置类上面加上注解,在方法名上加上@bean这个注解,就可以自动注册。
@EnableAutoConfiguration:是自动配置的注解,这个注解会根据我们添加的组件jar来完成一些默认配置,我们做微服务时会添加spring-boot-starter-web这个组件jar的pom依赖,这样配置会默认配置springmvc 和tomcat。
@ComponentScan:扫描当前包下的子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。等价于<context:component-scan>的xml配置文件中的配置项。
大多数情况下,这三个注解会同时使用,基于最佳实践,这三个注解就被做了包装,包装成了@SpringBootApplication注解。
2、@ServletComponentScan
Servlet、Filter、Listener可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置。
3、@MapperScan
SpringBoot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描。它和@mapper注解是一样的作用,不同的地方是扫描入口不一样。@Mapper需要加在每一个mapper接口类上面。所以大多数情况下,都是在规划好工程目录之后,通过@MapperScan注解配置路径完成mapper接口的注入。
4、@ImportResource @Import @PropertySource
这三个注解属于资源导入注解,用来导入自定义的一些配置文件。
@ImportResource (locations={})用于导入其他xml配置文件,需要标注在主配置类上。
@PropertySource用于导入property的配置文件指定文件路径,相当于使用spring的<importresource/>标签来完成配置项的引入。
@Import注解是一个可以将普通类导入到spring容器中做管理
5、@Controller
表明这个类是一个控制器类,和@RequestMapping来配合使用拦截请求,这样请求会在完成后转向一个视图解析器。但是在大多微服务搭建的时候,前后端会做分离。所以请求后端只关注数据处理,后端返回json数据的话,需要配合@ResponseBody注解来完成。
@RestController 是@Controller 和@ResponseBody的结合,一个类被加上@RestController 注解,数据接口中就不再需要添加@ResponseBody。更加简洁。
6、@Service
这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给spring容器。事务的切面也会配置在这一层。当然,这个注解不是一定要用。有了泛指组件的注解,当我们不能确定具体作用的时候,可以用泛指组件的注解托付给spring容器。
7、@Resource
@Resource和@Autowired一样都可以用来装配bean,都可以标注字段上,或者方法上。 @Resource注解不是spring提供的,是属于J2EE规范的注解。
这两个注解的区别就是匹配方式上有点不同,@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配。
8、@Repository
@Repository注解类作为DAO对象,管理操作数据库的对象。
总的来说,@Component,@Service,@Controller,@Repository都是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理。
其中@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。
通过这些注解的分层管理,就能将请求处理,业务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。
所以我们在日常开发中,如果能用@Service,@Controller,@Repository其中一个标注这个类的定位的时候,就不要用@Component来标注。
9、@Transactional
通过这个注解可以声明事务,可以添加在类上或者方法上。
在SpringBoot中不用再单独配置事务管理,一般情况是我们会在servcie层添加事务注解,即可开启事务,加上这个注解,如果发生unchecked exception,就会发生回滚。
@Transactional只能被应用到public方法上,对于其它非public的方法,如果标记@Transactional也不会报错,但方法没有事务功能。