【Spring】例項化上下文物件及載入多個配置檔案
一、例項化上下文物件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Car car = (Car) ctx.getBean("car");
幾個常用的類:
ClassPathXmlApplicationContext:從類路徑下的xml配置檔案中載入上下文定義.
FileSystemXmlApplicationContext:讀取檔案系統下xml配置檔案並載入
ClassPathXmlApplicationContext與FileSystemXmlApplicationContext兩者的區別只是查詢配置檔案的起始路徑不同,一個以classpath為當前路徑,一個是直接用檔案系統的當前路徑,內部沒有太大區別。
二、載入多個配置檔案
開發中,我們經常以業務功能或業務分層的方式,定義不同的xml配置檔案。
如何載入多個xml配置檔案呢?可以這樣:
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml","Spring-Connection.xml","Spring-ModuleA.xml"});
但是這種方法不易組織並且不好維護。
如果配置檔案存在多個的情況下,推薦的載入配置檔案的方式有以下幾個:
1、指定總的配置檔案去包含子的配置檔案,然後只加載總的配置檔案即可。
在總的配置檔案applicationContext.xml中使用import標籤進行子檔案包
總配置檔案applicationContext.xml:
<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-3.0.xsd"> <import resource="common/Spring-Common.xml"/> <import resource="connection/Spring-Connection.xml"/> <import resource="moduleA/Spring-ModuleA.xml"/> </beans>
程式碼中載入配置檔案:
ApplicationContext ac= new ClassPathXmlApplicationContext("applicationContext.xml");
2、使用星號來匹配多個檔案進行載入,檔名稱要符合規律。 (推薦使用)
配置檔案的名稱如下:
applicationContext.xml
applicationContext-action.xml
applicationContext-service.xml
applicationContext-dao.xml
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext*.xml");
3、可以使用陣列作為引數,一次性載入多個配置檔案
String[] files={"applicationContext.xml","applicationContext-test.xml"};
ApplicationContext ac = new ClassPathXmlApplicationContext(files);
注意:自動裝配功能和手動裝配要是同時使用,那麼自動裝配就不起作用。
4、JavaConfig配置的情況下:可單獨建立一個AppConfig.java,然後將其他的配置匯入到AppConfig.java中
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import({ CustomerConfig.class, SchedulerConfig.class })
public class AppConfig {
}
這樣,載入時,只需要載入AppConfig.java即可
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);