Java 每次使用子类中的方法时调用父类中的方法
我陷入了这样一种情况:有许多Action类,它们都是从父类TPDispatchAction扩展而来的。现在,我必须在每次调用任何操作方法时基本上设置一个会话Springbean,其中我设置了用户的租户id 粗略的方法是在所有操作类的所有操作方法中添加设置值的代码行 有没有更好的办法 编辑Java 每次使用子类中的方法时调用父类中的方法,java,spring,inheritance,saas,Java,Spring,Inheritance,Saas,我陷入了这样一种情况:有许多Action类,它们都是从父类TPDispatchAction扩展而来的。现在,我必须在每次调用任何操作方法时基本上设置一个会话Springbean,其中我设置了用户的租户id 粗略的方法是在所有操作类的所有操作方法中添加设置值的代码行 有没有更好的办法 编辑 使用MethodBeforeAdvice AOP解决了问题。您可能希望在超类中创建一个方法,如 //super class A A { public foo(){ //create her
使用MethodBeforeAdvice AOP解决了问题。您可能希望在超类中创建一个方法,如
//super class A
A {
public foo(){
//create here whatever you want
bar();
}
protected bar();
}
//extending class/action
B:A{
bar(){
//your implementation
}
}
它的调用是由所有其他子类实现的另一个方法
外部对象只需调用并查看foo方法,您就可以在那里访问您的初始化或后处理。您可以在前面放置一个拦截器来设置会话范围中的bean。尝试实施
org.springframework.web.servlet.HandlerInterceptor
对请求处理场景进行预处理和后处理。您可以在prehandle方法中设置
tenantID
建议使用PostConstruct注入
@PostConstruct
void initializeCommon() {
//set values here
}
我使用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中的所有方法调用。您想在调用操作方法时在会话中设置bean吗?不,它实际上是一个具有会话范围的bean,我在其中设置了变量“tenantid”。请参阅我的答案-使用截取器会有所帮助,但在这种情况下,我必须实现它bar()在所有子类中都是重复的,因为代码行在任何地方都是精确的。我还必须从子类中的所有方法调用bar()函数,这不会减少工作量。听起来很有趣。让我看看!我不接受这个答案,因为我的问题是使用AOP before()方法beforeadvice解决的。但是你的回答确实帮助我朝着正确的方向出发。好吧,你应该发布你自己的答案并接受它。这将有助于解决类似的问题。