@PropertySource與@ImportResource的區別


個人感悟:


spring boot主配置文件為application.yml、application.yaml、application.xml 這三個擴散名一人比一個優先級高。即xml文件中配置同一屬性的值,會覆蓋前邊屬性的值。
其實很多java類或接口,字段與這些主配置文件中屬性是 綁定的。
當我們自己創建類,也想放到容器中,可以單獨建立文件,可以通過@PropertySource與@ImportResource這兩個注解來注入到Servlet容器中。
前者適合yml、yaml格式,而@importResource則適用於xml文件格式,如beans.xml 可以把其注解到窗口中,不過要放在spring boot主配置文件頭部

@PropertySource 自定義配置文件名稱,用於spring boot 配置文件(yml或properties)與實體屬性映射。
引入說明

在從配置文件里獲取值,與JavaBean做映射。存在一個問題,我們是從主配置(application.yml)里讀取的。如果全部的配置都寫到application里,那么主配置就會顯得特別臃腫。為了按照不同模塊自定義不同的配置文件引入了@PropertySource
配置
主配置文件  application.yml

person.properties
person.lastName=李四
person.age=25
person.birth=2017/12/15
person.boss=true
person.maps.key1=value1
person.maps.key2=value2
person.lists=a,b,c
person.dog.name=dog
person.dog.age=2

 


JavaBean --> Person.java

@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”}))就可以搞定不在主配置里讀取,按照不同的功能模塊划分出不同的配置文件。
@ImportResource

一般情況下我們自定義的xml配置文件,默認情況下這個bean是不會加載到Spring容器中來的。需要@ImportResource注解將這個配置文件加載進來。
配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="helloService" class="com.chentongwei.springboot.service.HelloService"></bean>
</beans>

JavaBean

public class HelloService {

}

 

修改啟動類@SpringBootApplication

@ImportResource(locations = {"classpath:beans.xml"})
public class Springboot02ConfigApplication {

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



小結
   @PropertySource
    @PropertySource 用於引入*.Properties或者 .yml 用於給javabean實體類注入值

@Component
@ConfigurationProperties(prefix="bird2")  //需要與@Component 配合使用,沒有使用@PropertySource()則指向全局配置文件application.yml或application.properties
//只能指向.properties文件,不可以指向.yml文件 沒有此文件則指向主配置文件 @PropertySource(value
={"classpath:entity/pigean.properties"},ignoreResourceNotFound=false,encoding="UTF-8")

 


    @ImportResource 用於引入.xml 類型的配置文件 在spring boot中已經被配置類替代,且要求放在配置啟動類上
  
    @ImportResource一般用於啟動類上
————————————————
版權聲明:本文為CSDN博主「zzh_spring」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zzh_spring/article/details/89331957


免責聲明!

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



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