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

相關文章
相關標籤/搜索