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

1、简单的Java配置

 配置文件(jdbc.properties)  

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

  编写一个配置类

 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

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

 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 }

打印结果

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

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

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

接下来我们重新创建一个类,用来属性注入

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

接下来在要使用的地方通过

@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 }

启动类

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

End......

猜你喜欢

转载自www.cnblogs.com/gaohuanhuan/p/10586110.html