上一篇,我们已经学会了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的四种属性注入方式总结
-
@Autowired注入
-
构造方法注入
-
@Bean方法形参注入
-
直接在@Bean方式上使用@ConfigurationProperties(prefix = "jdbc")