Spring AOP что-то упускает - PullRequest
       2

Spring AOP что-то упускает

0 голосов
/ 20 сентября 2010

Я просто играю с AspectJ (1.6) с Spring (2.5), но, похоже, не работает должным образом.Я настроил свой "beans.xml", используя:

<aop:aspectj-autoproxy/>
<bean id="testBean1" class="apackage.MyClass">
<bean id="aopBean1" class="apackage.AfterReturningExample"/>

с правильным набором пространств имен и некоторыми другими bean-компонентами без значения.Я использую простой bean-компонент для проверки советов:

package apackage;

        @Aspect
        public class MyClass {

            public MyClass()
            {

            }
                public Boolean testAspectJ()
                {
                        System.out.println("returning from MyClass.testAspectJ()");
                        return false;
                }
        }

И это aop bean:

package apackage;    
@Aspect 
    public class AfterReturningExample {
        public AfterReturningExample(){}
        @AfterReturning("execution(* apackage.MyClass.*(..))")
        public void test() throws Exception{

            System.err.println("\n\n####  After Returning MyClass.testAspectJ()\n\n");
        }
    }

И, наконец, это код тестирования (в основном методе):

ApplicationContext ctx = new ClassPathXmlApplicationContext("apackage/beans.xml"); 
MyClass bean = (MyClass) ctx.getBean("testBean1"); 
bean.testAspectJ();

Вывод выводит только:

returning from MyClass.testAspectJ()

Странно то, что если я использую для pointcut:

"execution(public * *(..))"

, журнал показывает System.out.println класса AfterReturningExample.Чего мне не хватает?

1 Ответ

0 голосов
/ 20 сентября 2010

Решение найдено!Прежде всего, MyClass не является аспектом, поэтому не нуждается в аннотации @ Aspect .Во-вторых, MyClass должен быть реализацией данного интерфейса (сказал MyClassInterface ), а в тестовом коде я лучше использую MyClassInterface bean = (MyClassInterface) ctx.getBean("testBean1");.Я мог бы использовать прокси класса, а не интерфейс, только если бы в beans.xml я добавил <aop:aspectj-autoproxy proxy-target-class="true"/> и библиотеку CGLIB в classpath.

...