Spring中@value以及属性注入的学习

一、简单的Java配置

 配置文件(jdbc.properties)  java

jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root jdbc.password=123

  编写一个配置类mysql

 1 @Configuration  2 @PropertySource("classpath:jdbc.properties")  3 public class JdbcConfig {  4 
 5     @Value("${jdbc.url}")  6  String url;  7     @Value("${jdbc.driverClassName}")  8  String driverClassName;  9     @Value("${jdbc.username}") 10  String username; 11     @Value("${jdbc.password}") 12  String password; 13 
14  @Bean 15     public DataSource dataSource() { 16         DruidDataSource dataSource = new DruidDataSource(); 17  dataSource.setUrl(url); 18  dataSource.setDriverClassName(driverClassName); 19  dataSource.setUsername(username); 20  dataSource.setPassword(password); 21         return dataSource; 22  } 23 }


注解解读
@Configuration: 声明JdbcConfig是一个配置类
@PropertySource: 指定属性文件的路径
@value: 经过@value为属性注入值
@Bean: 经过dataSource()方法声明为一个注册Bean的方法,Spring会自动调用该方法,该方法的返回值会加入到Spring的容器中
而后就能够在任何位置注入DataSource

当配置上属性后即可以注入任何类使用了spring

 1 @RestController  2 public class HelloController {  3 
 4  @Autowired  5     private DataSource dataSource;  6  @Autowired  7     private JdbcConfig jdbcConfig;  8     
 9     @GetMapping("hello") 10     public String hello() { 11         System.out.println(jdbcConfig.getDriverClassName()+"=="+jdbcConfig.getUrl()); 12         return "hello, spring boot!" + dataSource; 13  } 14 
15 }

打印结果sql

二、改造原有缺陷,SpringBoot推荐的方式

以上方法的注入方式,虽然属性数据注入进去了,可是不够强大,由于他只能注入基本数据类型。app

在SpringBoot中,提供了一种新的属性注入方式,支持各类java基本数据类型及复杂数据类型ui

接下来咱们从新建立一个类,用来属性注入url

1 @Data 2 @ConfigurationProperties(prefix = "jdbc") 3 public class SpringBootProperty { 4     private String url; 5     private String driverClassName; 6     private String username; 7     private String password; 8 
9 }
注解解析:
  @ConfigurationProperties注解声明当前类为属性读取类
  prefix:读取数据文件中,前缀为jdbc的值
在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致
属性文件是定义在application.yml文件中的
 1 spring:  2  application:  3  name: property  4 server:  5   port: 8083
 6 jdbc:  7  driverClassName: com.mysql.jdbc.Driver  8   url: jdbc:mysql://127.0.0.1:3306/test
 9  username: root 10   password: 123

 

接下来在要使用的地方经过spa

@EnableConfigurationProperties(SpringBootProperty.class)来声明要使用SpringBootProperty这个类的对象
 1 @RestController  2 @EnableConfigurationProperties(SpringBootProperty.class)  3 public class HelloController {  4 
 5  @Autowired  6     private SpringBootProperty springBootProperty;  7  @Autowired  8     private DataSource dataSource;  9  @Autowired 10     private JdbcConfig jdbcConfig; 11 
12     @GetMapping("hello") 13     public String hello() { 14         System.out.println("SpringBoot推荐的属性注入方式: " + springBootProperty.getDriverClassName() + "==" + springBootProperty.getUrl()); 15         return "hello, spring boot!"; 16  } 17 }

启动类code

1 @SpringBootApplication 2 public class App { 3     public static void main(String[] args) { 4         SpringApplication.run(App.class); 5 
6  } 7 }

End......server

相关文章
相关标签/搜索