【问题标题】:struts 2 action class instance variable initializationstruts 2 动作类实例变量初始化
【发布时间】:2010-12-08 06:48:55
【问题描述】:

我目前正在处理一个现有项目。它使用的是 Struts 2 + Spring 2.5。

有一个action类,我们称之为ActionA.java,里面有一个实例变量,是一个服务接口,比如,

类ActionA{

//变量

受保护的ServiceA接口服务A;

//动作方法,利用serviceA方法

}

在spring bean定义中,有一个定义,为

我没有找到其他与serviceA变量初始化相关的地方,真的很想知道,哪一部分找到了这个变量的正确实现类,并对其进行了初始化?

这真的让我很困惑。感谢您的任何启发。

杰基

【问题讨论】:

  • 我想我找到了答案。一旦 struts-spring 插件放在那里,它就将 struts objectFactory 配置为 spring。默认的自动装配是按名称,这意味着,在初始化动作对象后,它将通过使用 spring bean 设置其属性,具有与属性名称相同的 bean id。如,struts.apache.org/2.x/docs/spring-plugin.html

标签: spring struts2 webwork


【解决方案1】:

一种方法是将服务 bean 定义为

<bean id="serviceA" class="com.company.serviceAImplementationClass"/>

<bean id="actionClassA" class="com.company.ActionA">
   <property name="serviceA" ref="serviceA"/>
</bean>

然后在你的类中,为你的服务类编写 setter 和 getter。

class ActionA{

//variables

protected ServiceAInterface serviceA;

//action methods, utilizing serviceA methods

public ServiceAInterface getServiceA() {
   return this.serviceA;
}

public void setServiceA(ServiceAInterface serviceA)
   this.serviceA = serviceA;
}

}

就是这样。服务类 bean 将在应用程序启动期间由 spring 初始化,并将其引用分配给您的操作类。

【讨论】:

  • 对于action类bean的定义,即使不配置属性,如下只要因为您在动作类中有设置器,并且属性名称与 bean 定义相同,如“serviceA”。它也有效。其实这是我的问题。无论如何,无论如何,感谢cmets。而我自己也找到了答案。
  • 这个其实可以参考struts.apache.org/2.0.8/docs/spring-plugin.html。另外,使用debug模式,我发现,实际上依赖只是在action执行的过程中注入的。
猜你喜欢
  • 2010-11-26
  • 2021-05-07
  • 2011-06-21
  • 1970-01-01
  • 2021-08-12
  • 2017-04-05
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多