0%

SpringBoot的java配置

深入解读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  //声明一个类是一个java配置类,相当于一个xml配置文件
@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 //把方法的返回值注入到spring容器
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  //声明一个类是一个java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {

@Autowired
private JdbcProperties jdbcProperties;

@Bean //把方法的返回值注入到spring容器
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  //把方法的返回值注入到spring容器
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  //把方法的返回值注入到spring容器
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
DruidDataSource druidSource = new DruidDataSource();
return druidSource;
}

springboot的四种属性注入:

  1. @Autowired注入
  2. 构造方法注入
  3. @Bean方法形参注入
  4. 直接在@Bean方法上使用@ConfigurationProperties(prefix=”jdbc”)

平时用的最多的是第一种@Autowired方法

-------- 本文结束 感谢阅读 --------