每次使用子类中的方法时,在父类中调用方法

时间:2014-06-02 10:22:52

标签: java spring inheritance saas

我遇到了很多Action类,它们都是从父类TPDispatchAction扩展而来的。现在我必须在每次调用任何动作方法时基本上设置会话弹簧bean,其中我设置用户的租户ID。

粗略的方法是添加在所有操作类的所有操作方法中设置值的代码行。

有没有更好的方法呢?

修改

使用MethodBeforeAdvice AOP解决问题

4 个答案:

答案 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中的所有方法调用。