spring核心配置文件引入外部properties文件和另外的xml配置文件
spring核心配置文件引入外部properties文件和另外的xml配置文件
為什么要引入外部文件
我們使用jdbc的時候,會創建一個jdbc.properties配置文件,如果我需要在spring的IOC中存入連接池對象呢?
是不是需要給鏈接對象的屬性url username password driver ,我們應該如何在spring的配置文件中引入外部文件呢?
引入properties文件
? Spring提供了讀取外部properties文件的機制,使用讀取到的數據為bean的屬性賦值
? 操作步驟
xmlns:context=“http://www.springframework.org/schema/context”
< context:property-placeholder location=“classpath:filename.properties”>
< property name=“propertyName” value="propertiesName"/>?注意:如果需要加載所有的properties文件,可以使用?.properties表示加載所有的properties文件?注意:讀取數據使用{propertiesName}"/> ? 注意:如果需要加載所有的properties文件,可以使用*.properties表示加載所有的properties文件 ? 注意:讀取數據使用propertiesName"/>?注意:如果需要加載所有的properties文件,可以使用?.properties表示加載所有的properties文件?注意:讀取數據使用{propertiesName}格式進行,其中propertiesName指properties文件中的屬性名
代碼演示
實體類準備
我使用一個User類,有兩個屬性,我這個兩個屬性的值,從properties配置文件中讀取值,通過IOC 的DI依耐注入值
package com.fs.demo;public class User {private String username;private String password;// set方法讓spring可以DI依耐注入屬性public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';} }properties配置文件
username=xiaofu
password=1234
**注意:**配置文件中username前面要加個前綴,不然賦值的時候會把你當前計算機的用戶名取出來,而不是從properties中讀取的,原因是因為計算機的環境變量中有個值也是username,而spring啟動的時候會讀取環境變量中的值,從而導致和properties中的值沖突
applicationContext.xml核心配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!-- 加載context命名空間 xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd --><!-- 引入外部properties文件properties中的key不要和本機的環境變量中的值沖突,因為spring在加載的時候獲取計算機的環境變量中的值若與環境中的值沖突,讀取出來的值就是計算機環境變量中設置的值所以,我們配置jdbc的時候一般就是jdbc.username.不會直接username注意:若要導入多個properties,需要在主配置文件中配置,classpath:*.properties<context:property-placeholder location="classpath:*.properties"/>--><context:property-placeholder location="classpath:data.properties"/><!-- 把user交給ioc管理--><bean id="user" class="com.fs.demo.User"><!-- ${properties中的key名} --><property name="username" value="${user.username}"/><property name="password" value="${user.password}"/></bean> </beans>測試代碼
@Testpublic void testProperties(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");User user = (User) applicationContext.getBean("user");System.out.println(user);/*properties配置信息username=xiaofupassword=1234User{username='93422', password='1234'}若輸出結果不為properties中配置的值,這個值是我的電腦用戶名,因為spring在啟動的時候會讀取計算機的環境變量,環境變量中會有這個username所以拿到的值是你環境變量中配置的值,而不是你properties中設置的值所以,我們在寫properties的key的時候,一般會jdbc.username,以免和系統的環境變量中的username沖突,導致取出的值不是properties中的值*//*properties配置信息是這樣的就會正常讀取到值user.username=xiaofuuser.password=1234//打印輸出User{username='xiaofu', password='1234'}*/}控制臺運行結果
spring核心配置文件中導入其他的.xml配置文件
團隊開發
? 名稱:import
? 類型:標簽
? 歸屬:beans標簽
? 作用:在當前配置文件中導入其他配置文件中的項
? 格式:
< beans>
< import />
< /beans>
? 基本屬性:
< import resource=“config.xml"/>
◆ resource:加載的配置文件名
? Spring容器加載多個配置文件
new ClassPathXmlApplicationContext(“config1.xml”,“config2.xml”);
? Spring容器中的bean定義沖突問題
◆ 同id的bean,后定義的覆蓋先定義的
◆ 導入配置文件可以理解為將導入的配置文件復制粘貼到對應位置
◆ 導入配置文件的順序與位置不同可能會導致最終程序運行結果不同
代碼演示
實體類
創建一個類,這個類有個實體類屬性,一個set方法,用于DI依耐注入
package com.fs.demo;public class Demo {private TestDemo testDemo;public void setTestDemo(TestDemo testDemo) {this.testDemo = testDemo;}@Overridepublic String toString() {return "Demo{" +"testDemo=" + testDemo +'}';} }創建一個類,這個類是上一個類的屬性
package com.fs.demo;public class TestDemo {public void testDemo(){System.out.println("TestDemo測試語句輸出");} }applicationContext.xml配置文件
applicationContext.xml主配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!-- 引入外部的spring的配置文件--><import resource="classpath:applicationContext02.xml"/><bean id="demo" class="com.fs.demo.Demo"> <!-- 這里就體現了引入外部的applicationContext02.xml文件,因為ref="testDemo這就是在applicationContext02配置的--><property name="testDemo" ref="testDemo"/></bean> </beans>applicationContext02.xml其他的.xml配置文件,在主配置文件中被引入了的
<?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"><!-- 把test交給springIOC管理--><bean id="testDemo" class="com.fs.demo.TestDemo"/></beans>測試代碼
//測試引入其他的配置文件@Testpublic void testDemo(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//在主配置文件中獲取出daoDemo demo = (Demo) applicationContext.getBean("demo");//Demo{testDemo=com.fs.demo.TestDemo@544a2ea6}因為在applicationContext02.xml中吧testDemo交給IOC管理了,所以demo中的set注入成功System.out.println(demo);}控制臺運行效果
總結
以上是生活随笔為你收集整理的spring核心配置文件引入外部properties文件和另外的xml配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringIOC的依耐注入DI---s
- 下一篇: 浅谈:数据结构之双链表结构与代码模拟双链