как настроить контекст приложения для получения компонента spring в struts2

#struts2

#struts2

Вопрос:

У меня есть проект интеграции spring hibernate в maven struts2. Я импортировал в eclipse и запустил правильно. Но когда я шаг за шагом перенастроил этот проект, добавив предопределенную зависимость к этому проекту. Он не может получить объект spring bean из файла контекста приложения. Таким образом, он генерирует исключение нулевого указателя. Итак, как настроить получение объекта spring.

Комментарии:

1. Покажите нам структуру проекта, как вы определили.

Ответ №1:

Примечание: не пытайтесь добавить слушателя в web.xml

 <listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>
  

Альтернатива 1: используйте Spring WebApplicationContext в своем действии в методе execute

 import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

Public class yourAction extends ActionSupport{
    public String execute() throws Exception {
        WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
        UserBo userBo1 = (UserBo)context.getBean("userBo");
    }
}
  

Альтернатива 2: вы можете указать DI в applicationContext.xml

 <bean id="userBo" class="yourPackageName.UserBoImpl" />

<bean id="userSpringAction" class="yourPackageName.UserSpringAction">
    <property name="userBo" ref="userBo" /> 
</bean>
  

в struts.xml

 //struts.xml
<action name="userSpringAction" class="userSpringAction" >
    <result name="success">pages/user.jsp</result>
</action>
  

В вашем действии

 public class yourAction extends ActionSupport{
    //DI via Spring
    UserBo userBo;
}
  

Альтернатива 3: вы можете использовать наивную инъекцию зависимостей Struts

Шаг 1: в вашем struts.xml

 <struts>
    <bean class="yourPackageName.UserBoImpl" name="userBo" />
    <package name="mydefault" namespace="/" extends="struts-default">
    ....
    </package>
</struts>
  

Шаг 2: в вашем действии

 Public class yourAction extends ActionSupport{

    // struts DI
    @Inject("userBo")
    private UserBO userBO;

}