Spring Boot中的注解

101 阅读2分钟

1,@SpringBootApplication

这是 主启动类注解 image.png 在这个注解中我们会看见下面这些注解 image.png 在这里我就不对元注解进行介绍了 在这些注解里面

注解释意
@SpringBootConfiguration代表这是一个springboot中的配置类
@EnableAutoConfiguration开启自动配置,会去自动读取到spring.factories文件(读取过程我在Spring Boot自动配置原理中有讲)
@ComponentScan组件扫描,默认会扫描到当前包及其子包下的类上注解

补充:

1,@SpringBootConfiguration

image.png 在@SpringBootConfiguration中可以看出它与@Configuration注解如出一辙 所以我们可以选用这两个注解中的任意一个来声明一个配置类(不要同时使用)

2,@ComponentScan

image.png 我们可以通过数组形式手动指定需要扫描的包 例如 image.png 如此便可扫描到com包以及test包内类上的注解了

2,@ConfigurationProperties

@ConfigurationProperties是SpringBoot提供的重要注解, 他可以将一些配置属性批量注入到bean对象。 例如现在有一个application.yml配置文件

spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.cj.jdbc.driver
      url: jdbc:mysql:///springboot_01
      username:root
    	password:123456	

如果不使用@ConfigurationProperties注解使用@Value一个个注入

    @Component
    public class DataSourceProperties {

        @Value("${spring.jdbc.datasource.driverClassName}")
        private String driverClassName;
        @Value("${spring.jdbc.datasource.url}")
        private String url;
        @Value("${spring.jdbc.datasource.username}")
        private String username;
        @Value("${spring.jdbc.datasource.password}")
        private String password;

        // 省略getter和setter.....
    }

如果使用批量注入注解

    @Component
    @ConfigurationProperties(prefix = "spring.jdbc.datasource")
    public class DataSourceProperties2 {

        private String driverClassName;
        private String url;
        private String username;
        private String password;

        // 省略getter和setter.....
    }    

需要保证

  1. (prefix = "spring.jdbc.datasource")中的前缀和属性名与配置文件中的key相同
  2. 使用@EnableConfigurationProperties(DataSourceProperties2.class),开启DataSourceProperties2身上的@ConfigurationProperties注解

例如:

    @Controller
    @EnableConfigurationProperties(DataSourceProperties2.class)
    public class HelloController {

        @Autowired
        private DataSourceProperties2 dataSourceProperties2 ;

        @RequestMapping(path = "/hello")
        @ResponseBody
        public String sayHello(){
            System.out.println(dataSourceProperties2);
            return "hello spring boot";
        }
    }

如此便可保证自动注入成功 如果报错image.png 需要我们在依赖中添加

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

3,@ConditionalXxx

这是Spring Boot中的条件化配置注解 这些注解的作用就是如果满足条件, 该配置类就生效, 如果不满足该配置类就不生效 常用的条件化选择注解如下 :

注解作用
@ConditionalOnBean如果存在某个Bean, 配置类生效
@ConditionalOnMissingBean如果不存在某个Bean, 配置类生效
@ConditionalOnClass如果存在某个类, 配置类生效
@ConditionalOnMissingClass如果不存在某个类, 配置类生效
@ConditionalOnProperty如果存在某个属性配置, 配置类生效
@ConditionalOnWebApplication如果是一个web应用, 配置类生效
@ConditionalOnNotWebApplication如果不是一个web应用, 配置类生效

我们看到自动配置类上就有一些条件化配置注解 image.png 试想一下: 我们可以用这个注解做什么东西呢?(比如手写数据源启动器支持配置数据源类型)