我遇到了很多Action类,它们都是从父类TPDispatchAction扩展而来的。现在我必须在每次调用任何动作方法时基本上设置会话弹簧bean,其中我设置用户的租户ID。
粗略的方法是添加在所有操作类的所有操作方法中设置值的代码行。
有没有更好的方法呢?
修改
使用MethodBeforeAdvice AOP解决问题
答案 0 :(得分:1)
您可以在前面放置一个拦截器来在Session范围内设置bean。尝试实施
org.springframework.web.servlet.HandlerInterceptor
预处理和处理请求处理方案。您可以在预处理方法中设置tenantID
答案 1 :(得分:0)
您可能想在超类中创建一个方法,如
//super class A
A {
public foo(){
//create here whatever you want
bar();
}
protected bar();
}
//extending class/action
B:A{
bar(){
//your implementation
}
}
并调用另一个由所有其他子类实现的方法。
外部对象只需要调用并查看foo方法,您就可以进行初始化或后期处理。
答案 2 :(得分:0)
建议使用PostConstruct注入。
@PostConstruct
void initializeCommon() {
//set values here
}
答案 3 :(得分:0)
我使用Spring AOP MethodBeforeAdvice
public void before(Method methodName, Object[] arguments, Object arg2)
throws Throwable {
}
在此,methodName
是被调用的方法的名称。 arguments
是该方法的参数列表,arg2
是返回的对象。因此,当HTTPRequest对象是我的动作方法中的一个对象时,我能够使用参数并捕获会话。
(基本上我已将Spring集成到我的项目中,基于Struts 1.3)
在applicationContext.xml
中<bean name="globalInterceptor"
class="com.xyz.common.filters.GlobalRequestInterceptor"></bean>
<bean name="autoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>globalInterceptor</value>
</list>
</property>
</bean>
所以这基本上拦截了所有服务bean中的所有方法调用。