您好,登錄后才能下訂單哦!
本篇內容介紹了“SpringBoot中@ConfigurationProperties注解怎么實現配置綁定”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
properties配置文件如下:
human.name=Mr.Yu human.age=21 human.gender=male
如何把properties里面的配置綁定到JavaBean里面,以前我們的做法如下:
public class PropertiesUtil { public static void getProperties(Person person) throws IOException { Properties properties = new Properties(); properties.load(new FileInputStream("src/main/resources/demo.properties")); //得到配置文件key的名字 Enumeration enumeration = properties.propertyNames(); while (enumeration.hasMoreElements()){ String key =(String)enumeration.nextElement(); String value = properties.getProperty(key); System.out.println("key="+key+"——————value="+value); //封裝到JavaBean //以下內容省略 } } }
輸出結果:
key=human.name——————value=Mr.Yu
key=human.age——————value=21
key=human.gender——————value=maleProcess finished with exit code 0
可以看到這個過程十分繁雜,但是在SpringBoot中這個過程將會變得非常簡單。
在SpringBoot中有如下3種方法:
1.@ConfigurationProperties注解+@Component(或@Controller或@Service或@Repository)注解
只有在容器中的組件,才會擁有SpringBoot提供的強大功能,也就是如果我們需要使用到@ConfigurationProperties注解,那么我們首先要保證該對JavaBean對象在IoC容器中,所以需要用到Component注解來添加組件到容器中。
@ConfigurationProperties注解中prefix與value互相都是別名
也就是說@ConfigurationProperties(value = "human")
與@ConfigurationProperties(prefix = "human")
是一樣的
prefix和value指的是前綴的意思
代碼測試: properties配置文件:
human.name=Mr.Yu human.age=21 human.gender=male
Person類:
@Component ////只有在容器中的組件,才會擁有SpringBoot提供的強大功能 @ConfigurationProperties(value = "human") public class Person { public String name; public int age; public String gender; public Person() { } public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } }
測試類如下:
//@Controller ////@ResponseBody以字符串的方式寫給瀏覽器,而不是跳轉到某個頁面 //@ResponseBody //@RestController = @Controller + @ResponseBody @RestController public class HelloController { //自動注入屬性 @Autowired Person person; @RequestMapping("/person") public Person getPerson(){ return person; } }
測試結果:
@ConfigurationProperties注解+@EnableConfigurationProperties注解
這種方式@EnableConfigurationProperties注解一定要在配置類上寫,@EnableConfigurationProperties的意思是開啟屬性配置功能,開啟誰的屬性配置功能呢,因為我們上面的Person類想進行配置綁定,所以我們在后面加上參數Person.class:@EnableConfigurationProperties(Person.class)
@EnableConfigurationProperties(Person.class)的作用就是把這個Person組件注冊到容器中,對象的名稱為:human-com.ysw.boot.properties.Person 其中human是@ConfigurationProperties(value = "human")中前綴value的值
在Person類上還是有@ConfigurationProperties注解,這種方式把Person類上的@Component注解換成了配置類上的@EnableConfigurationProperties(Person.class)注解
這種方式主要用在引用第三方包時,比如第三方包中有一個Person類,該類中沒有使用@Component,我們也不能夠給第三方包中的類加上@Component,這個時候就可以使用在配置類上加上@EnableConfigurationProperties注解的方法。
@ConfigurationProperties注解+@Import注解
使用@Import給容器中自動創建出這個類型的組件、默認組件的名字就是全類名
@Import注解與2中的@ConfigurationProperties注解效果是一樣的
只不過他們注冊到容器中的名稱不同:
@ConfigurationProperties注解注冊到容器中對象的名稱為:human-com.ysw.boot.properties.Person 其中human是@ConfigurationProperties(value = "human")中前綴value的值
@Import注解注冊到容器中對象的名稱為:com.ysw.boot.properties.Person
配置類:
Person類:
測試類:
application.properties文件:
server.port=8888 human.name=Mr.Yu human.age=21 human.gender=male222
測試結果:
“SpringBoot中@ConfigurationProperties注解怎么實現配置綁定”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。