2014-01-29 4 views
1

Итак, у меня проблема с добавлением аспекта в уже созданную систему. Проблема - pointcut не работает для некоторых классов. Например, этот код работает хорошо:Совет по весне не применяется к некоторым методам некоторых классов

<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.

Теперь, другой образец. Этот образец не работает.

<aop:pointcut id="addSubmitListener" 
         expression="execution (* com.click.otherfoo.ClassB.methodB(..))"/> 

Класс B определены в других ApplicationContext, импортированные с <import resource="classpath*:...

также еще одна разница methodB - имеет юридической силы типа и Methoda - не

ответ

0

Я просто попытался это, который может или не может быть вашим конфигурации. Но код, упомянутый вами, отлично подходит для меня. Вот что я пробовал на основе вашего вопроса и упомянутой информации.

Если я просто изменил определение компонента в файле anotherConfig.xml, он отлично работает и для 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; 

    } 
Смежные вопросы