所以,我在向已经创建的系统添加方面时遇到了问题。问题 - 切入点对某些类不起作用。 例如,这段代码效果很好:
<aop:config proxy-target-class="true">
<aop:pointcut id="addSubmitListener"
**expression="execution (* com.solutions.foo.ClassA.methodA(..))"/>**
<aop:aspect ref="hijackBeforeAddSubmitListenerBean">
<aop:around method="proceedWhileNotDash" pointcut-ref="addSubmitListener"/>
</aop:aspect>
</aop:config>
ClassA在此applicationContext中定义为bean。
现在,其他样本。此示例无效。
<aop:pointcut id="addSubmitListener"
expression="execution (* com.click.otherfoo.ClassB.methodB(..))"/>
在其他applicationContext中定义的B类,使用<import resource="classpath*:...
还有一个区别方法B - 具有void类型,而methodA - 不是
答案 0 :(得分:0)
我刚试过这个可能会或可能不是你的配置。但是你提到的代码对我来说非常好。以下是我根据您的问题和提到的信息尝试的内容。
如果我只更改anotherConfig.xml
文件中的bean定义,它也适用于ClassA
。适用于ClassB
<强>的applicationContext.xml 强>
<import resource="classpath*:anotherConfig.xml"/>
<context:component-scan base-package="com.appContextexample"/>
<aop:aspectj-autoproxy/>
<aop:config proxy-target-class="true">
<aop:pointcut id="addSubmitListener" expression="execution (* com.click.otherfoo.ClassB.methodB(..))"/>
<aop:aspect ref="hijackBeforeAddSubmitListenerBean">
<aop:around method="proceedWhileNotDash" pointcut-ref="addSubmitListener"/>
</aop:aspect>
</aop:config>
<bean id = "hijackBeforeAddSubmitListenerBean" class = "com.appContextexample.HijackBeforeAddSubmitListenerBean"/>
</beans>
<强> anotherConfig.xml 强>
<bean id="classA" class="com.click.otherfoo.ClassB"></bean>
Application.java 这是起点。
public class Application {
public static void main(final String[] args) {
final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
final ClassB bean = (ClassB) context.getBean("classA");
bean.methodB("test");
System.out.println("appContext created" + bean);
}
<强> ClassB.java 强>
package com.click.otherfoo;
public class ClassB {
public void methodB(final String str) {
System.out.println(str);
}
}
最后是看点。
public class HijackBeforeAddSubmitListenerBean {
public Object proceedWhileNotDash(final ProceedingJoinPoint pjp) throws Throwable {
System.out.println("Called the aspect");
pjp.proceed();
return null;
}