前段时间学习了SpringBoot这个快速开发框架,觉得这个框架写的真的是太优秀了,尤其是SpringBoot的自动配置机制,真的是过于强大,它使我们不再需要定义样板化的配置,大大提高了程序的开发效率。
在这点上,我需要解释的是 SpringBoot 其实是对 Spring 和 SpringMVC 框架的再封装。那么,有的小伙伴可能会有疑惑,既然不用写那么繁琐的配置文件了,那它是如何进行工作的?通俗的讲,SpringBoot 是约定优于配置 ,也就是说,SpringBoot 的自动配置主要是根据 pom.xml 中导入的依赖来进行配置,使用的时候只需要再添加几个注解就可以使用了。那么下面我就来为大家介绍 SpringBoot 中几种常见的注解,这也是我们大家必须掌握的注解。
1.@SpringBootApplication
这是 Spring Boot 最核心的注解,用在 Spring Boot 的主类上,标志着这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。其实这个注解是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 这三个注解的组合注解,也可以用这三个注解来代替 @SpringBootApplication 注解。
@SpringBootConfiguration:标注当前类是配置类,这个注解继承自 @Configuration,并会将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例注入到 Spring 的容器中,并且实例名就是方法名。
@EnableAutoConfiguration:开启 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean,这个注解会根据我们添加的组件 jar 包来完成一些默认配置。
@ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository 注解标记的类并纳入到 Spring 容器中进行管理。等价于 xml 配置文件中的配置项。
2.@Configuration
这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
3.@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
4.@Import
这是 Spring 3.0 添加的新注解,用来导入一个或者多个由 @Configuration 注解修饰的类。
5.@ImportResource
这是 Spring 3.0 添加的新注解,用来导入一个或者多个 Spring 配置文件。这对 Spring Boot 兼容老项目非常有用,因为有些配置无法通过 Java Config 的形式来配置,就只能依靠于这个注解来导入。
6.@Autowired
这应该是我们最熟悉也是最常用的注解,是 Spring 的自动装配,这个注解可以用到构造器,变量域,方法,注解类型上。当我们需要从 Spring 的 bean 工厂中获取一个 bean 时,Spring 就会自动为我们装配该 bean 中标记为 @Autowired 的元素。
7.@Controller
用于标注控制层组件
8.@Service
用于标注业务层组件。
9.@Repository
用于标注数据访问组件,即 DAO 组件。
10.@RequestMapping
RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
11.@ResponseBody
支持将返回值放在response内,而不是一个页面,通常用户返回json数据,一般标注在返回值旁或者是方法上。
12.@RestController
该注解为一个组合注解,相当于 @Controller 和 @ResponseBody 的组合,注解在类上,意味着,该 Controller 的所有方法都默认加上了 @ResponseBody。
13.@Transactional
通过这个注解可以声明事务,可以添加在类上或者方法上。
14.@Bean
注解在方法上,声明当前方法的返回值为一个 bean,替代 xml 中的方式。
15.@Conditional
Spring 4.0 中可以使用此注解定义条件化的 bean,通过实现 Condition 接口,并重写 matches 方法,从而决定该 bean 是否被实例化。
这15个注解都是 SpringBoot 中比较常用的注解,我希望大家可以完全掌握,面试的时候也是很有可能被问到的。