springboot的四种属性注⼊(注解)
3.3.SpringBoot的属性注⼊
在上⾯的案例中,我们实验了java配置⽅式。不过属性注⼊使⽤的是@Value注解。这种⽅式虽然可
⾏,但是不够强⼤,因为它只能注⼊基本类型值。
在SpringBoot中,提供了⼀种新的属性注⼊⽅式,⽀持各种java基本数据类型及复杂类型的注⼊。
1)新建JdbcProperties,⽤来进⾏属性注⼊:
代码:
@ConfigurationProperties(prefix = “jdbc”) public class JdbcProperties {
private String url;
private String driverClassName;
private String username;
private String password;
// … 略
// getters 和 setters
}
在类上通过@ConfigurationProperties注解声明当前类为属性读取类
prefix="jdbc"读取属性⽂件中,前缀为jdbc的值。
在类上定义各个属性,名称必须与属性⽂件中jdbc.后⾯部分⼀致,并且必须具有getter和setter
⽅法
需要注意的是,这⾥我们并没有指定属性⽂件的地址,SpringBoot默认会读取⽂件名为
application.properties的资源⽂件,所以我们把jdbc.properties名称改为
application.properties
2)在JdbcConfiguration中使⽤这个属性:
通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使⽤
JdbcProperties这个类的对象
然后你可以通过以下⽅式在JdbcConfiguration类中注⼊JdbcProperties:
1. @Autowired注⼊
@Configuration
@EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {
@Autowired
private JdbcProperties jdbcProperties;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.Url());
dataSource.DriverClassName()); dataSource.Username()); dataSource.Password());
return dataSource;
}
}
2. 构造函数注⼊
@Configuration
@EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {
private JdbcProperties jdbcProperties;
public JdbcConfiguration(JdbcProperties jdbcProperties){ this.jdbcProperties = jdbcProperties;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.Url());
dataSource.DriverClassName());
dataSource.Username());
dataSource.Password());
return dataSource;
}
}适合新手的spring boot
3. @Bean⽅法的参数注⼊
@Configuration
@EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration {
// @Bean //把⽅法的返回值注⼊到spring容器
// public DataSource dataSource(JdbcProperties jdbcProperties){
// DruidDataSource dataSource = new DruidDataSource();
// dataSource.DriverClassName());
// dataSource.Url());
// dataSource.Username());
// dataSource.Password());
// return dataSource;
/
/ }
本例中,我们采⽤第三种⽅式。 3)测试结果:
⼤家会觉得这种⽅式似乎更⿇烦了,事实上这种⽅式有更强⼤的功能,也是SpringBoot推荐的注⼊⽅ 式。两者对⽐关系:package cn.fig;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.t.properties.ConfigurationProperties;
import org.t.properties.EnableConfigurationProperties;
import t.annotation.Bean;
import t.annotation.Configuration;
import t.annotation.PropertySource;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
/**
*
*/
@Configuration //声明⼀个类是⼀个java配置类,相当于⼀个xml配置⽂件
//@PropertySource(“classpath:jdbc.properties”) //读取资源⽂件
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
// @Autowired
// private JdbcProperties jdbcProperties;
/
/ public JdbcConfiguration(JdbcProperties jdbcProperties){
// this.jdbcProperties = jdbcProperties;
// @Bean //把⽅法的返回值注⼊到spring容器
// public DataSource dataSource(){
// DruidDataSource dataSource = new DruidDataSource();
// dataSource.setDriverClassName(DriverClassName());
// dataSource.setUrl(Url());
// dataSource.setUsername(Username());
// dataSource.setPassword(Password());
// return dataSource;
// }
/
/ @Bean //把⽅法的返回值注⼊到spring容器
// public DataSource dataSource(JdbcProperties jdbcProperties){
// DruidDataSource dataSource = new DruidDataSource();
// dataSource.DriverClassName());
// dataSource.Url());
// dataSource.Username());
// dataSource.Password());
// return dataSource;
// }
@Bean //把⽅法的返回值注⼊到spring容器
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
}
优势:
Relaxed binding:松散绑定
不严格要求属性⽂件中的属性名与成员变量名⼀致。⽀持驼峰,中划线,下划线等等转换,
甚⾄⽀持对象引导。⽐如:user.friend.name:代表的是user对象中的friend属性中的name 属性,显然friend也是对象。@value注解就难以完成这样的注⼊⽅式。
meta-data support:元数据⽀持,帮助IDE⽣成属性提⽰(写开源框架会⽤到)。
package cn.fig;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.t.properties.ConfigurationProperties;
import org.t.properties.EnableConfigurationProperties; import t.annotation.Bean;
import t.annotation.Configuration;
import t.annotation.PropertySource;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
/**
*
*/
@Configuration //声明⼀个类是⼀个java配置类,相当于⼀个xml配置⽂件
//@PropertySource(“classpath:jdbc.properties”) //读取资源⽂件
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
// @Autowired
// private JdbcProperties jdbcProperties;
// public JdbcConfiguration(JdbcProperties jdbcProperties){
// this.jdbcProperties = jdbcProperties;
// }
// @Bean //把⽅法的返回值注⼊到spring容器
/
/ public DataSource dataSource(){
// DruidDataSource dataSource = new DruidDataSource();
// dataSource.setDriverClassName(DriverClassName()); // dataSource.setUrl(Url());
// dataSource.setUsername(Username());
// dataSource.setPassword(Password());
// return dataSource;
// }
// @Bean //把⽅法的返回值注⼊到spring容器
// public DataSource dataSource(JdbcProperties jdbcProperties){
// DruidDataSource dataSource = new DruidDataSource();
// dataSource.DriverClassName());
// dataSource.Url());
// dataSource.Username());
// dataSource.Password());
// return dataSource;
// }
@Bean //把⽅法的返回值注⼊到spring容器
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论