1. 程式人生 > >【Spring】例項化上下文物件及載入多個配置檔案

【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);