10.springboot屬性注入
10.1通過以前spring中配置
java配置主要靠java類和一些注解來達到和xml配置一樣的效果,比較常用的注解有:
@Configuration:聲明一個類作為配置類,代替xml文件
@Bean:聲明在方法上,將方法的返回值加入Bean容器,代替<bean>標簽
@Value:屬性注入
@PropertySource:指定外部屬性文件。在類上添加@PropertySource("classpath:/jdbc.properties")
我們接下來用以前配置來嘗試實現連接池配置
10.1.1 引入數據源連接依賴
<dependency> <groupId>com.github.drtrang</groupId> <artifactId>druid-spring-boot2-starter</artifactId> <version>1.1.10</version> </dependency>
10.1.2添加jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/leyou jdbc.username=root jdbc.password=123
10.1.3配置數據源
創建JdbcConfiguration類: 使用spring中的value注解對每個屬性進行注入,用bean注解將返回值添加到容器中
@Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfiguration { @Value("${jdbc.url}") String url; @Value("${jdbc.driverClassName}") String driverClassName; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } }
解讀:
@Configuration:聲明JdbcConfiguration是一個配置類。
@PropertySource:指定屬性文件的路徑是:classpath:jdbc.properties
通過@Value為屬性注入值。
通過@Bean將 dataSource()方法聲明為一個注冊Bean的方法,Spring會自動調用該方法,將方法的返回值加入Spring容器中。相當於以前的bean標簽
然后就可以在任意位置通過@Autowired注入DataSource了!
springboot對上面的配置進行了優化
10.2 SpringBoot注入方式1: 屬性注入 (最常用的方式)
在上面的案例中,我們實驗了java配置方式。不過屬性注入使用的是@Value注解。這種方式雖然可行,但是不夠強大,因為它只能注入基本類型值。
在SpringBoot中,提供了一種新的屬性注入方式,支持各種java基本數據類型及復雜類型的注入。
10.2.1新建JdbcProperties
,用來進行屬性注入:
@ConfigurationProperties(prefix = "jdbc") //這里需要定義出在application文件中定義屬性值得前綴信息 public class JdbcProperties { private String url; private String driverClassName; private String username; private String password; // ... 略 // getters 和 setters }
這里面就不需要在設置value屬性,他是通過set方法進行資源自動注入的.
注意:set方法中的屬性名的值要和資源文件中屬性文件中值名字保持一致
10.2.2在application.properties(yml)中定義配置信息
Springboot在啟動時並不會加載其他配置文件,它只加載默認的配置文件application.properties(yml),因此,將配置信息添加到這里,通過前綴進行區分,進行引用
12.2.3 引用數據源 使用@EnableConfigurationProperties(引用屬性類的字節碼)引用配置信息
10.2 springboot注入方式2: 構造方法注入
之前的操作與注入方式1一樣,只是這里注入的方式不一樣
這里不需要添加@Autowired注解,也不需要在添加@Bean注解,在要使用數據源的類,使用他的構造方法進行注入
10.3 springboot注入方式3: 通過bean方法的形參進行注入
在方法上的形參上進行定義要注入的數據源,方法對數據源初始化處理后,通過bean注解將方法的返回值注入到容器中
10.4 spring注入方式4: 最優雅的注入
不需要jdbcProperties
直接將配置注解添加到方法上,這是因為DataSource內部也是有set方法.進行自動注入.
但是,也是需要有前提的:必須保證注入的有set方法,並且set方法的名字和配制文件中的屬性名需要是一樣的.這里使用的是datasource中內部的set方法