Introduction
In the execute method of many Struts 2 ActionSupport classes are statements that create objects and then have those objects execute methods that perform needed tasks. Whenever one class creates an object of another class that introduces a dependency between the two classes. The Spring framework makes it easier for the application developer to manage these dependencies and helps make the application more flexible and maintainable. This tutorial will show you how to use Struts 2 and Spring together to manage the dependencies between your ActionSupport classes and other classes in your application.
...
Code Block |
---|
| java |
---|
| java |
---|
title | EditAction Class Hard-Coded Dependency |
---|
|
private EditService editService = new EditServiceInMemory();
|
...
Code Block |
---|
| java |
---|
| java |
---|
title | EditAction Class No Hard-Coded Dependency |
---|
|
private EditService editService ;
|
...
Code Block |
---|
| java |
---|
| java |
---|
1 | title Set Method For EditService Object |
---|
|
public void setEditService(EditService editService) {
this.editService = editService;
}
|
...
Code Block |
---|
| xml |
---|
| xml |
---|
title | Spring Listener In web.xml |
---|
|
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
|
...
Code Block |
---|
| xml |
---|
| xml |
---|
title | Spring Configuration File |
---|
|
<?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">
<bean id="editService" class="org.apache.struts.edit.service.EditServiceInMemory" />
</beans>
|
...
Code Block |
---|
| xml |
---|
| xml |
---|
title | Spring Configuration For ActionSupport Class Managed By Spring |
---|
|
<?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">
<bean id="editService" class="org.apache.struts.edit.service.EditServiceInMemory" />
<bean id="editAction" class="org.apache.struts.edit.action.EditAction" scope="prototype">
<property name="editService" ref="editService" />
</bean>
</beans>
|
Note in the above that there is an editAction
bean bean and its editService
property property is set to the editService
bean bean. Since we are having Spring manage the EditAction
class class we must specify any properties of EditAction
that that we want Spring to inject. Please remember that actions must be created on each request, they cannot be singletons
- this is the default scope
that's why it must be changed to prototype
.
In the struts.xml
configuration configuration file you must specify the Spring id value for the class attribute of the action node. This tells Struts to get a bean with that id value from Spring for the Action class.
Code Block |
---|
| xml |
---|
| xml |
---|
title | Struts Configuration For Spring Managed ActionSupport Class |
---|
|
<action name="edit" class="editAction" method="input">
<result name="input">/edit.jsp</result>
</action>
|
...