Table of Contents |
---|
Description
Info |
---|
Spring is a lightweight container, providing centralized, automated configuration and wiring of your application objects, using a technique called "Dependency Injection" |
...
Code Block | ||
---|---|---|
| ||
struts.objectFactory = org.apache.struts2.spring.StrutsSpringObjectFactory |
Code Block | ||
---|---|---|
| ||
<struts> <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> ... </struts> |
Autowiring
...
name | Auto-wire by matching the name of the bean in Spring with the name of the property in your action. This is the default |
---|---|
type | Auto-wire by looking for a bean registered with Spring of the same type as the property in your action. This requires you to have only one bean of this type registered with Spring |
auto | Spring will attempt to auto-detect the best method for auto-wiring your action |
constructor | Spring will auto-wire the parameters of the bean's constructor |
no | Turn off externally defined autowiring. Annotation-driven injection and injection based on Springs *Aware-interfaces still applies |
By default, the framework will at least try to use Spring to create all its objects. If the object cannot be created by Spring, then the framework will create the object itself.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
|
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans default-autowire="autodetect"> <bean id="personManager" class="com.acme.PersonManager" scope="prototype"/> ... </beans> |
Tip | |||||||
---|---|---|---|---|---|---|---|
| |||||||
Since the Spring integration uses a standard Listener, it can be configured to support configuration files other than
See the Spring documentation for a full description of this parameter. |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"/>
<package name="default" extends="struts-default">
<action name="foo" class="com.acme.Foo">
<result>foo.ftl</result>
</action>
</package>
<package name="secure" namespace="/secure" extends="default">
<action name="bar" class="bar">
<result>bar.ftl</result>
</action>
</package>
</struts>
|
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="autodetect">
<bean id="bar" class="com.my.BarClass" singleton="false"/>
...
</beans>
|
To use session-scoped components with Spring and Struts, see the Spring Session Components Workarounds analysis.
Class Reloading
The Spring plugin can be configured to automatically reload classes that change in the file system. This feature will enable code changes to be "hot deployed" without having to restart the web container. To enable this feature follow these steps:
- Set "struts.devMode" to "true"
- Set "struts.class.reloading.watchList" to a comma separated list of directories, or jar files (absolute or relative paths)
Add this to web.xml:
Code Block type xml <context-param> <param-name>contextClass</param-name> <param-value>org.apache.struts2.spring.ClassReloadingXMLWebApplicationContext</param-value> </context-param>
Add Apache Commons JCI FAM to the classpath. If you are using maven, add this to pom.xml
Code Block type xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-jci-fam</artifactId> <version>1.0</version> </dependency>
Letting the reloading class loader handle all the classes can lead to ClassCastException(s) because instances of the same classes loaded by different class loaders can not be assigned to each other. To prevent this problem we suggest that struts.class.reloading.acceptClasses
is used to limit the classes loaded by the reloading class loader, so only actions are handled by it. This constant supports a comma separated list of regular expressions:
Code Block | ||
---|---|---|
| ||
<constant name="struts.class.reloading.acceptClasses" value="com\.myproject\.example\.actions\..*" />
|
Warning |
---|
This feature is experimental, and should never be used in production systems. |
Settings
The following settings can be customized. See the developer guide.
Setting | Description | Default | Possible Values |
---|---|---|---|
| The autowire strategy |
|
|
| Whether the autowire strategy should always be used, or if the framework should try to guess the best strategy based on the situation |
|
|
| Whether to have Spring use its class cache or not |
|
|
| List of jar files or directories to watch for changes |
| Comma separated list of absolute or relative paths to jars or directories |
| List of regular expressions of accepted class names |
| Comma separated list of regular expressions of classes that will be loaded by the reloading class loader(we suggest to add regular expressions so only action classes are handled by the reloading class loader) |
| Reload the runtime configuration (action mappings, results etc) when a change is detected in one of the watched directories |
|
|
DEPRECATED: struts.objectFactory.spring.enableAopSupport | Uses different logic to construct beans to allow support AOP, it uses an old approach to create a bean, switch this flag if you have problems with Spring beans and AOP |
|
|
Installation
This plugin can be installed by copying the plugin jar into your application's /WEB-INF/lib
directory. No other files need to be copied or created.