springboot屬性注入的四種方式


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方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM