2.0.6與之前版本整合的設定
2.0.6與之前版本的整合方式有很大不同,而整合的Spring版本也從1.2.8到了2.0.1
2.0.6將org.apache.struts2.spring.StrutsSpringObjectFactory自struts2-core移至struts2-spring-plugin,
所以必需要加入struts2-spring-plugin的Library.使用Maven2的可以這樣設定
pom.xml
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.0.6</version>
</dependency>
2.0.6與之前的版本皆需在struts.propertis中設定
struts.objectFactory = spring
struts2-spring-plugin中除了org.apache.struts2.spring.StrutsSpringObjectFactory這個主要java外,
另外有的就是一個struts-plugin.xml,設定了struts.objectFactory真正使用的Class
struts-plugin.xml
<struts>
<bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<!-- Make the Spring object factory the automatic default -->
<constant name="struts.objectFactory" value="spring" />
<package name="spring-default">
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
</interceptors>
</package>
</struts>
2.0.6與之前版本整合的差異
之前的版本是這樣整合的
org.apache.struts2.dispatcher.Dispatcher
private void init(ServletContext servletContext) {
.......................
if (Settings.isSet(StrutsConstants.STRUTS_OBJECTFACTORY)) {
String className = (String) Settings.get(StrutsConstants.STRUTS_OBJECTFACTORY);
if (className.equals("spring")) {
className = "org.apache.struts2.spring.StrutsSpringObjectFactory";
}
}
.......................
}
很明顯的有硬來的嫌疑
2.0.6則是分為了幾個部份
org.apache.struts2.dispatcher.Dispatcher
public void init() {
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
.......................
init_AliasStandardObjects() ; // [4]
.......................
}
[1]載入了org/apache/struts2/default.properties
[2]利用了StrutsXmlConfigurationProvider來載入struts-default.xml,struts-plugin.xml,struts.xml三個xml,
其中就包含了struts2-spring-plugin的struts-plugin.xml,這樣就能取得
<constant name="struts.objectFactory" value="spring" />
<bean ... name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
這兩項設定
[3]載入struts.properties,透過手動設定的struts.objectFactory = spring,
就可以明白要載入的ObjectFactory Class是哪一個了
[4]此時才真正載入所有指定的Class
這樣做得確是較之前的方式好上不少,但是xml的設定檔就只能有這三個struts-default.xml,struts-plugin.xml,struts.xml
特別是struts-plugin.xml,如果自己還要寫Plugin或是希望同時能使用兩種不同的Plugin,都會遇到設定的問題.
沒有留言:
張貼留言