@autowired не работает на Struts2 + Spring
Я хочу сделать веб-приложение на основе Struts2 и Spring. Прежде всего, я проверил, работает ли @Autowired на Struts2. Но это не так, источник данных является нулевым. Я понятия не имею, как я могу это исправить. Пожалуйста, дайте мне информацию для этого.
HelloWorld.java
package example;
import java.sql.Connection;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.opensymphony.xwork2.ActionSupport;
@Component
public class HelloWorld extends ActionSupport {
@Autowired
private BasicDataSource dataSource;
public String execute() throws Exception {
Connection con = dataSource.getConnection();
con.close();
return SUCCESS;
}
}
applicationContext.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem" />
<property name="maxActive" value="10" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<context:annotation-config />
<context:component-scan base-package="example" />
web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
struts.xml
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="example" namespace="/example" extends="struts-default">
<action name="HelloWorld" class="example.test.HelloWorld">
<result>/example/HelloWorld.jsp</result>
</action>
</package>
1 ответ
Делать @Autowired
Для работы в вашем приложении Struts вам нужны данные вещи:
Убедитесь, что в вашем classpath есть плагин struts2 и spring.
Вставьте следующую строку в strtus.xml
<struts>
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
...
</struts>
Настройте Action classes
в xml файле весны
<bean id="editAction" class="org.apache.struts.edit.action.EditAction" >
<property name="editService" ref="editService" />
</bean>
И дать идентификатор боба в struts.xml
файл вместо того, чтобы дать класс действия
<action name="edit" class="editAction" method="input">
<result name="input">/edit.jsp</result>
</action>
Для получения дополнительной информации обратитесь к http://struts.apache.org/release/2.2.x/docs/spring-and-struts-2.html и http://struts.apache.org/release/2.2.x/docs/spring-plugin.html