Spring建议不适用于某些类的某些方法

时间:2014-01-29 00:22:00

标签: java spring aop aspectj spring-aop

所以,我在向已经创建的系统添加方面时遇到了问题。问题 - 切入点对某些类不起作用。 例如,这段代码效果很好:

<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 - 不是

1 个答案:

答案 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;

   }