在SpringBoot框架中,注解做为一种隐式配置,极大的简化了之前xml文件的配置方式。SpringBoot中包含许多种类的注解,这里对在SpingBoot项目中经常使用到的一些注解的进行大致的归纳总结;
一、启动相关
1、@SpringBootApplication
在SpirngBoot启动类里面,都加入了此启动注解,此注解是个组合注解,包括了@SpringBootConfiguration 、@EnableAutoConfiguration和@ComponentScan注解。
- @SpringBootConfiguration 继承至@Configuration
,其实两种功能一致,都是标注该类为配置类
- @EnableAutoConfiguration 这个注解是SpirngBoot自动配置的核心所在,通过此注解,能所有符合自动配置条件的bean的定义加载到
spring
容器中。 - @ComponentScan 该注解会扫描当前包及子包下面被纳入sping容器管理的类。
注意事项:
- 一般我们在实际项目中会根据自己的需要排除一些无需自动配置的类,例如我们会配置自己的数据库,所以就不需要springboot自动注入数据源,这可以利用
exclude
进行排除
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
- 当需扫描第三方jar包时,我们可以通过在配置类中使用@Configuration与@ComponentScan来引入第三方jar包下的类
@Configuration @ComponentScan(basePackages = {"com.test.service"}) //引入第三方jar包下的类
2、@Import
@Import注解可用来导入一个或者多个 Spring 配置文件,特别是第三方jar包下的一些配置类,需要通过Import注解进行加载,代码如下所示
@Import({KafkaConfig.class, JedisConfig.class}) //引入第三方jar包里配置类
二、配置相关
以一般的的配置类中用到的注解为例
1、@Configuration
@Configuration专门用来标注配置类,它一般会配合
2、@Bean
使用@Bean注解拿到配置返回相关实例,并放入sping容器中统一管理
3、@PropertySource
目的是加载指定路径下的属性文件
5、@Value
配合@PropertySource注解使用,指定该字段对应的配置文件中的内容
4、@Order
利用@Order控制配置类的加载顺序
结合以上注解对kafka进行配置示例代码如下
@Configuration @PropertySource("classpath:spring-kafka.properties") @Order(2) public class KafkaConfig { @Value("${spring.kafka.bootstrap-servers}") private String bootstrapServers; @Bean public KafkaListenerContainerFactory> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory
三、构造相关
1、@Service
用于标注服务层,主要用来进行业务的逻辑处理
2、@Repository
用于标注持久层,主要用来进行数据库相关操作
3、@Component
一个通用的注解,可以注解各种组件,就是说当我们需要注入sping容器中bean类没有明确分类时(不属于@service、@Repository等的时候),我们就可以使用@Component来标注这个类。
4、@Scope
spring容器管理bean默认是单例模式,如果你需要使用多例模式可以通过@Scope("prototype")注解来实现。
5、@Autowired
这个就很简单了,用于Spring容器中Bean类实例的注入
6、@PostConstruct
在Bean初始化之后(构造方法和@Autowired之后)执行指定操作。如果在项目中有些操作需要在Bean类构造后执行,可以使用@PostConstruct注解,实例代码如下
@Component public class demo { @PostConstruct public void start() { //在构造方法和@Autowired注入实例后执行 } }
四、web相关
1、@Controller 和 @RestController
控制器的注解,处理http请求的入口,这两个注解的主要区别在于@Controller中如果需要返回json数据需要使用@ResponseBody注解来配合,直接用@RestController则直接返回json数据
2、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六大属性
value, method;
-
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
-
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
consumes,produces;
-
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
-
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params,headers;
-
params: 指定request中必须包含某些参数值是,才让该方法处理。
-
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求;
RequestMapping的简化注解有:
@GetMapping 等同于 @RequestMapping(method = RequestMethod.GET) @PostMapping 等同于 @RequestMapping(method = RequestMethod.POST) @PutMapping 等同于 @RequestMapping(method = RequestMethod.PUT) @DeleteMapping 等同于 @RequestMapping(method = RequestMethod.DELETE) @PatchMapping 等同于 @RequestMapping(method = RequestMethod.PATCH)
3、@RequestBody
RequestBody注解允许request的参数在reqeust体中,也就是后端以实体的方式接收前端发送的数据
4、@RequestParam
RequestParam注解则是以不同参数之间用&分隔的方式接收前端发送的数据
结合以上注解的常规示例代码如下
@RestController @RequestMapping("/api") public class ApiController extends BaseController { @PostMapping("/login") public User login(@RequestBody User user){ //代码 } @GetMapping("/getUser") public User getUser(@RequestParam String userName, @RequestParam String userPhone){ //代码 } }
以上就是在SpirngBoot项目中经常使用到的一些注解进行的总结,当然还有很多其他注解在这里就不一一赘述了。
关注微信公众号,查看更多技术文章。