什么是属性注入?
属性注入就是在实例化对象时,同时向对象中的属性进行相应的赋值,就是给类中的属性赋值。
第一步
在Resoures下面创建配置文件application.properties
写入jdbc代码:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc://127.0.0.1:3306/leyou
jdbc.username=root
jdbc.password=123
如何区分不同配置?
通过前缀,prefix=“jdbc”,第二步会用到。
第二步
配置类(JdbcProperties)定义相关属性,使用 get、set方法定义。
注意:字段名和applicaiton.properties保持一致
@ConfigurationProperties(prefix = "jdbc") //读取application.properties中的jdbc相关配置
public class JdbcProperties {
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
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;
}
private String driverClassName;
private String url;
private String username;
private String password;
}
第三步
开始注入
四种属性注入:
1、@Autowired注入 (最常用)
@Configuration //声明一个类是一个java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class) //启用JdbcProperties配置文件
public class JdbcConfiguration {
@Autowired
private JdbcProperties jdbcProperties;
@Bean //把方法的返回值注入到容器
public DataSource dataSource(){
DruidDataSource dataSource=new DruidDataSource();
dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
dataSource.setUrl(this.jdbcProperties.getUrl());
dataSource.setUsername(this.jdbcProperties.getUsername());
dataSource.setPassword(this.jdbcProperties.getPassword());
return dataSource;
}
}
2、构造方法注入
@Configuration //声明一个类是一个java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class) //启用JdbcProperties配置文件
public class JdbcConfiguration {
@Autowired
private JdbcProperties jdbcProperties;
public JdbcConfiguration(JdbcProperties jdbcProperties){
this.jdbcProperties=jdbcProperties;
}
@Bean //把方法的返回值注入到容器
public DataSource dataSource(){
DruidDataSource dataSource=new DruidDataSource();
dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
dataSource.setUrl(this.jdbcProperties.getUrl());
dataSource.setUsername(this.jdbcProperties.getUsername());
dataSource.setPassword(this.jdbcProperties.getPassword());
return dataSource;
}
}
3、@Bean方法形参注入
@Configuration //声明一个类是一个java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class) //启用JdbcProperties配置文件
public class JdbcConfiguration {
@Bean //把方法的返回值注入到容器
public DataSource dataSource(JdbcProperties jdbcProperties){
DruidDataSource dataSource=new DruidDataSource();
dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
dataSource.setUrl(jdbcProperties.getUrl());
dataSource.setUsername(jdbcProperties.getUsername());
dataSource.setPassword(jdbcProperties.getPassword());
return dataSource;
}
}
4、直接在@Bean方法上使用@ConfigurationProperties(prefix=“jdbc”) (最优雅的方式)
@Configuration //声明一个类是一个java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class) //启用JdbcProperties配置文件
public class JdbcConfiguration {
@Bean //把方法的返回值注入到容器
@ConfigurationProperties(prefix = "jdbc") //读取application.properties中的jdbc相关配置
public DataSource dataSource(){
DruidDataSource dataSource=new DruidDataSource();
return dataSource;
}
}
总结
最常用的还是第一种注入方式,更符合我们平时的玩法。虽然第四种方式很优雅,但是它要保证配置有相应的set方法,所以他还是有一定局限性的。