03.Spring boot属性注入方式

03 Spring boot 属性注入方式

在上面的案例中,实验了java配置方式。不过属性注入使用的是@Value注解。这种方式虽然可行,但是不够强 大,因为它只能注入基本类型值。

在Spring Boot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。

优势:
Relaxed binding:松散绑定 不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对象 引导。比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对 象。@value注解就难以完成这样的注入方式。

meta-data support:元数据支持,帮助IDE生成属性提示(写开源框架会用到)。

目标:能够使用@ConfigurationProperties实现Spring Boot配置文件配置项读取和应用

分析

需求:将配置文件中的配置项读取到一个对象中;

实现:可以使用Spring Boot提供的注解@ConfigurationProperties,该注解可以将Spring Boot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中。

1.实现步骤:

1.1. 创建配置项类JdbcProperties类,在该类名上面添加@ConfigurationProperties;
package com.piziwang.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

1.2. 将jdbc.properties修改名称为application.properties;
  • 在类上通过@ConfigurationProperties注解声明当前类为属性
  • 读取类 prefix=“jdbc” 读取属性文件中,前缀为jdbc的值。
  • 在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致
  • 需要注意的是,这里我们并没有指定属性文件的地址,所以我们需要把jdbc.properties名称改为 application.properties,这是Spring Boot默认读取的属性文件名:
1.3. 将JdbcProperties对象注入到JdbcConfig;
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
@Bean
    public DataSource dataSource(JdbcProperties jdbc){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(jdbc.getUrl());
        dataSource.setDriverClassName(jdbc.getDriverClassName());
        dataSource.setUsername(jdbc.getUsername());
        dataSource.setPassword(jdbc.getPassword());
        return dataSource;
    }
}
  • 通过 @EnableConfigurationProperties(JdbcProperties.class) 来声明要使用 JdbcProperties 这个类的 对象

  • 然后要使用配置的话;可以通过以下方式注入JdbcProperties,本例用第三种注入:

  • @Autowired注入

    private jdbcProperties prop;
    
  • 构造函数注入

    private JdbcProperties prop;
    public JdbcConfig(Jdbcproperties prop){
        this.prop = prop
    }
    
  • 声明有@Bean的方法参数注入

    @Bean
        public DataSource dataSource(JdbcProperties jdbc){
           ...
        }
    
1.4. 测试

和之前测试的结果一致,都能够获取到dataSource对象。

2.更加优雅的注入方式

事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties,将该类上的所有注 解去掉)中。而是直接在需要的地方声明即可;再次修改 JdbcConfig 类为如下代码

@Configuration
public class JdbcConfig {
@Bean
@ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}

我们直接把@ConfigurationProperties(prefix = "jdbc")声明在需要使用的 @Bean 的方法上,然后Spring Boot就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:该类必须有对应属 性的set方法!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值