SpringBoot入門教程(十八)@value、@Import、@ImportResource、@PropertySource


Spring Boot提倡基於Java的配置。這兩篇博文主要介紹springboot 一些常用的注解介紹

v@value

通過@Value可以將外部的值動態注入到Bean中。

添加application.properties的屬性,方便后面演示。

domain.name=cnblogs
    @Value("字符串1")
    private String testName; // 注入普通字符串

    @Value("#{systemProperties['os.name']}")
    private String systemPropertiesName; // 注入操作系統屬性

    @Value("#{ T(java.lang.Math).random() * 100.0 }")
    private double randomNumber; //注入表達式結果

    @Value("${domain.name}")
    private String domainName; // 注入application.properties的配置屬性

效果如下:

SpringBoot入門教程(十八)@value、@Import、@ImportResource、@PropertySource

v@Import

SpringBoot 的 @Import 用於將指定的類實例注入之Spring IOC Container中。

package com.cnblogs.demo;
public class Dog {
 
}
package com.cnblogs.demo;
 
public class Cat {
 
}

在啟動類中需要獲取Dog和Cat對應的bean,需要用注解@Import注解把Dog和Cat的bean注入到當前容器中。

package com.cnblogs.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;
 
//@SpringBootApplication
@ComponentScan
/*把用到的資源導入到當前容器中*/
@Import({Dog.class, Cat.class})
public class App {
 
    public static void main(String[] args) throws Exception {
 
        ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
        System.out.println(context.getBean(Dog.class));
        System.out.println(context.getBean(Cat.class));
        context.close();
    }
}

v@ImportResource

Spring Boot里面沒有Spring的配置文件,我們自己編寫的配置文件,也不能自動識別;想讓Spring的配置文件生效,加載進來;@ImportResource標注在一個配置類上.

@ImportResource(locations = {"classpath:applicationContext.xml"})
@SpringBootApplication
public class SpringBootConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootConfigApplication.class, args);
    }
}

v@PropertySource

自定義配置文件名稱,多用於配置文件與實體屬性映射。

person.properties

person.lastName=Jack
person.age=18
person.birth=2018/12/9
person.boss=true
person.maps.key1=value1
person.maps.key2=value2
person.lists=a,b,c
person.dog.name=tom
person.dog.age=1
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
    private String lastName;
    private Integer age;
    private boolean isBoss;
    private Date birth;

    private Map<String, Object> maps;
    private List<Object> lists;
    private Dog dog;
    ...setter/getter/toString...
}

這樣一個注解(@PropertySource(value = {"classpath:person.properties"}))就可以搞定不在主配置里讀取,按照不同的功能模塊划分出不同的配置文件。

v補充

@Bean注解用在方法上,作用:將方法的返回值添加到容器中;容器中這個組件默認的id就是方法名。springboot不推崇使用配置文件,推崇使用全配置方式開發,如何定義一個配置類呢?在類名上加@Configuration標簽標明這是一個配置類,方法上則用@Bean

v源碼地址

https://github.com/toutouge/javademosecond/tree/master/hellospringboot


作  者:請叫我頭頭哥
出  處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!


免責聲明!

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



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