专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

SpringBoot属性注入的各种姿势(含2.2.0版本最新方式)

常见的spring boot属性注入相关注解

常见的SpringBoot属性注入使用的注解类含以下几种:

  • @Value:常用于字段上,将Spring加载到的属性匹配注入到当前实例字段,可通过冒号:设置属性默认值。
  • @Configuration:作用于类上,声明一个类作为配置类并生成单例到Spring容器中。
  • @PropertySource:作用于类上,读取指定资源文件属性,常与@Configuration@ConfigurationProperties一起使用,可通过application.yml的引入配置取代该注解的使用。
  • @ConfigurationProperties:作用于类或方法上,将加载到的属性进行前缀匹配,再根据属性名与注解类中的字段名匹配进行属性注入,可与@PropertySource@Configuration一起使用,在配置文件中可通过冒号:设置属性默认值。2.2.0版本后大部分情况下无需再与@Configuration组合使用

2、2、0版本后新增的属性注入相关注解:

  • @DefaultValue:作用域参数上,设置不可变属性时的默认值的注释。
  • @ConstructorBinding:作用于类或构造方法上,通过通过函数而非set方法进行属性注入,常与@ConfigurationProperties一起使用,适用于设置不可变属性,建议不可变属性通过构造方法设置而非set方法。
  • @ConfigurationPropertiesScan:生成指定package下@ConfigurationProperties注解的属性配置类单例并进行属性注入放入容器管理。

在2、2.0版本之后的@SpringBootApplication注解添加了@ConfigurationPropertiesScan的功能,即应用启动时会扫描@SpringBootApplication注解的启动类所在package及所有子孙package下被@ConfigurationProperties注解的类并生成相应对象到容器中,因此2.2.0以后的版本@ConfigurationProperties大部分情况下都可单独使用,不需再与@Configuration组合生成实例。以下为2.2.0之后的SpringBootApplication:

@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) })
@ConfigurationPropertiesScan
public @interface SpringBootApplication {
    ...
}

各注解属性注入用例

  • ## @Value用例 ##
    @Value("${server.port:8080}") //没有设置则默认设为8080
    private String port;

  • @PropertySource用例

    classpath添加datasource.properties:

    datasource.url=test-url
    datasource.username=wilson
    datasource.password=test-password
    datasource.driver=${db.driver:com.mysql.jdbc.Driver}

**属性配置类DataSourceProperties :**
    @PropertySource("classpath:datasource.properties")
    @ConfigurationProperties("datasource")
    @Configuration
    @Data
    @Slf4j
    public class DataSourceProperties {
        private String url;
        private String username;
        private String password;
        private String driver;

        @PostConstruct
        public void init() {
            log.info(toString());
            log.info("DataSourceProperties initialized");
        }
    }

  • @ConfigurationProperties用例

    application.yml添加db配置:

    datasource:
      url: test-url
      username: wilson
      password: test-password
      driver: ${db.driver:com.mysql.jdbc.Driver}

也可在resources下新建一个application-datasource.yml进行属性配置,再通过application.yml中添加`spring.profiles.include: datasource`进行文件的属性引入。

**属性配置类DataSourceProperties :**
    @ConfigurationProperties("datasource")
    @Configuration
    @Data
    @Slf4j
    public class DataSourceProperties {
        private String url;
        private String username;
        private String password;
        private String driver;

        @PostConstruct
        public void init() {
            log.info(toString());
            log.info("DataSourceProperties initialized");
        }
    }

  • @ConstructorBinding与@DefaultValue用例

    用例1:

    @ConfigurationProperties("datasource")
    @Slf4j
    @ConstructorBinding
    @AllArgsConstructor
    @Getter
    @ToString
    public class DataSourceProperties {
        private String url;
        private String username;
        private String password;
        private String driver;

        @PostConstruct
        public void init() {
            log.info(toString());
            log.info("DataSourceProperties initialized");
        }
    }

**用例2:**
    @ConfigurationProperties("datasource")
    @Slf4j
    @ConstructorBinding
    @Getter
    @ToString
    public class DataSourceProperties {
        private String url;
        private String username;
        private String password;
        private String driver;

        public DataSourceProperties(String url, String username, String password, @DefaultValue("com.mysql.jdbc.Driver") String driver) {
            this.url = url;
            this.username = username;
            this.password = password;
            this.driver = driver;
        }

        @PostConstruct
        public void init() {
            log.info(toString());
            log.info("DataSourceProperties initialized");
        }
    }

`@DefaultValue`注解的参数若没有在配置文件中设置值或默认值,则初始化时使用注解中的值,即注入优先级为:文件属性值>文件属性默认值>`@Default`注解值

文章永久链接:https://tech.souyunku.com/43014

未经允许不得转载:搜云库技术团队 » SpringBoot属性注入的各种姿势(含2.2.0版本最新方式)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们