深入解读java配置类
1、java配置类
使用到的注解:
1.@Configuration:声明一个类作为配置类,代替xml文件
2.@Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签
3.@Value:属性注入(把配置文件的值注入对应的属性)
4.@PropertySource:指定外部属性文件
首先我们引入Druid连接池依赖:
1 2 3 4 5
| <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.5</version> </dependency>
|
在类路径,也就是resources目录下创建一个jdbc.properties文件,并配置一下内容:
1 2 3 4
| jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/leyou jdbc.username=root jdbc.password=yx1994
|
然后,创建一个配置类,并使用@Configuration和@PropertySource注解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfiguration {
@Value("${jdbc.driverClassName}") private String driverClassName; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password;
@Bean public DataSource dataSource(){ DruidDataSource druidSource = new DruidDataSource(); druidSource.setDriverClassName(driverClassName); druidSource.setUrl(url); druidSource.setUsername(username); druidSource.setPassword(password); return druidSource; } }
|
解读:
- @Configuration:声明我们JdbcConfig是一个配置类
- @PropertySource:指定属性文件的路径是:classpath:jdbc.properties
- 通过@Value为属性注入值
- 通过@Bean将 dataSource()方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。
2、读取全局配置文件,来注入属性
使用到的注解:
1、@ConfigurationProperties
2、@EnableConfigurationProperties
首先,需要在application.properties配置文件中,配置我们的数据库的属性配置:
1 2 3 4
| jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/leyou jdbc.username=root jdbc.password=yx1994
|
然后,我们需要编写一个JdbcProperties 资源文件类,给属性提供get和set方法,并使用@ConfigurationProperties注解指明前缀:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| @ConfigurationProperties(prefix = "jdbc") public class JdbcProperties { private String driverClassName; private String url; private String username; private String password; 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; } }
|
最后,在我们的配置类上,使用@EnableConfigurationProperties注解,并指明读取那个全局配置类,并将全局配置类注入到jdbcConfiguration类上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {
@Autowired private JdbcProperties jdbcProperties;
@Bean public DataSource dataSource(){ DruidDataSource druidSource = new DruidDataSource(); druidSource.setDriverClassName(jdbcProperties.getDriverClassName()); druidSource.setUrl(jdbcProperties.getUrl()); druidSource.setUsername(jdbcProperties.getUsername()); druidSource.setPassword(jdbcProperties.getPassword()); return druidSource; } }
|
3、构造方法属性注入
1 2 3 4 5 6
| private JdbcProperties jdbcProperties;
public JdbcConfiguration(JdbcProperties jdbcProperties){ this.jdbcProperties = jdbcProperties; }
|
4、方法形参属性注入
1 2 3 4 5 6 7 8 9
| @Bean public DataSource dataSource(JdbcProperties jdbcProperties){ DruidDataSource druidSource = new DruidDataSource(); druidSource.setDriverClassName(jdbcProperties.getDriverClassName()); druidSource.setUrl(jdbcProperties.getUrl()); druidSource.setUsername(jdbcProperties.getUsername()); druidSource.setPassword(jdbcProperties.getPassword()); return druidSource; }
|
5、最优雅的属性注入
1 2 3 4 5 6
| @Bean @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource(){ DruidDataSource druidSource = new DruidDataSource(); return druidSource; }
|
springboot的四种属性注入:
- @Autowired注入
- 构造方法注入
- @Bean方法形参注入
- 直接在@Bean方法上使用@ConfigurationProperties(prefix=”jdbc”)
平时用的最多的是第一种@Autowired方法