上一篇,我们已经学会了Java配置。
并且可以注入dataSource,但是功能不够强大。


Spring提供这种的注入方式是有缺陷的。
比如,这些属性,我们不止在一个类中要使用,那我们岂不是要多次注入。
这就很不舒服了,代码就冗余了。

来看看SpringBoot给我们提供的属性注入方法:

一、SpringBoot的第三种属性注入方式——通过@Autowired注解注入

我们可以专门定义一个属性读取类。

在这个类上添加 @ConfigurationProperties  注解。
(这时候上面会有个提示,可以按如下方法去掉。)

 

然后添加一个配置文件。
SpringBoot应用程序启动的时候,会默认读取一个配置文件:application.properties
所以使用SpringBoot,只用这个一个配置文件。
下面我们来创建这个配置文件

 

 

有里这个application.properties 配置文件之后,之前的jdbc.properties文件就不需要了。

把 jdbc.properties 里的属性配置,加到 application.properties 配置文件中。
注意你自己的数据库密码

 

 

@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;
    }
}

 

回到JdbcConfiguration中

 

@Configuration  //声明一个类是一个java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

    @Autowired
    private JdbcProperties jdbcProperties;

    @Bean //把方法的返回值注入到spring容器,然后在任何地方都可以使用了
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(this.jdbcProperties.getUrl());
        dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
        dataSource.setUsername(this.jdbcProperties.getUsername());
        dataSource.setPassword(this.jdbcProperties.getPassword());
        return dataSource;
    }
}

 

然后同样,controller里打上断点,用引导类启动项目,测试查看dataSource。

 

启动成功后,访问http://localhost:8080/hello/show,然后回到idea查看。

 

可以看到dataSource不为空,且四个参数都有了值,属性注入成功了。


这就是SpringBoot的属性注入方式。
事实上,SpringBoot提供了 4 种属性注入方式,这只是其中的一种。

下面我们再来看看 SpringBoot提供了 其他三种 种属性注入方式

二、SpringBoot的第二种属性注入方式——通过构造方法注入

不通过@Autowired自动注解类注入。
而是通过构造方法注入。

大家可以去用之前的 Debug启动运行的方法 测试一下。
结果还是一样的,dataSource不为空,四个属性也注入成功了。
这里就不重复截测试的图了。

 

三、SpringBoot的第三种属性注入方式——通过Bean方法的形参注入

 

 同样,大家也可以去测试一下。结果也是正确的。

 

四、SpringBoot的第三种属性注入方式——通过Bean方法的形参注入
 

 

 

 

五、SpringBoot的四种属性注入方式总结

  1. @Autowired注入

  2. 构造方法注入

  3. @Bean方法形参注入

  4. 直接在@Bean方式上使用@ConfigurationProperties(prefix = "jdbc")