Конфигурация Spring AOP (XML) - PullRequest
       0

Конфигурация Spring AOP (XML)

2 голосов
/ 27 сентября 2011

Я впервые экспериментирую с Spring AOP и застреваю в конфигурации XML.Я пытаюсь получить фиктивную версию «регистрации» на основе AOP, используя MethodInterceptor, чтобы обернуть определенные вызовы методов и сделать несколько простых System.out.println операторов до и после этих вызовов методов.Простые вещи, верно?

Так что в моем проекте много классов, два из них Fizz и Buzz.У Fizz есть метод с именем foo(), а в Buzz есть метод с именем wapap().Каждый раз, когда эти методы вызываются во время выполнения, я хочу, чтобы мой LoggingInterceptor выполнил свой метод invoke () вокруг них:

public class LoggingInterceptor implements MethodInterceptor
{
    public Object invoke(MethodInvocation methodInvocation)
    {
        try
        {
            System.out.println("About to call a special method.");
            Object result = methodInvocation.proceed();
            return result;
        }
        finally
        {
            System.out.println("Finished executing the special method.");
        }
    }
}

Так что я понимаю концепции совета (мой перехватчик подразумевается), pointcuts (методы, которые будут выполнять рекомендации вокруг них), и советники pointcut (привязки между advice и pointcuts).

Я просто изо всех сил связываю его в простой конфигурации XML.

Вот что ядо сих пор, но я знаю, что в нем отсутствуют определения советника для pointcut и pointcut, и, возможно, еще.

<beans default-autowire="no" >
    <bean name="loggingInterceptor" class="org.me.myproject.aop.LoggingInterceptor"/>   
</beans>

Чего мне не хватает здесь, чтобы сделать это специфичным для Fizz :: foo () и Buzz:: wapap () вызывает?

Любые толчки в правильном направлении очень ценятся!

Ответы [ 2 ]

6 голосов
/ 27 сентября 2011

Добавить это:

<aop:config>
    <aop:advisor advice-ref="loggingInterceptor" pointcut="execution(public * Fizz.foo(..))"/>
    <aop:advisor advice-ref="loggingInterceptor" pointcut="execution(public * Buzz.wapap(..))"/>
</aop:config>

Вам также необходимо добавить объявление пространства имен AOP в версии, соответствующей вашей инфраструктуре:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        ">

Также рассмотрите возможность использования аспектов @AspectJ и посмотрите на этот вопрос: Spring: Стандартный аспект ведения журнала (перехватчик) .

2 голосов
/ 27 сентября 2011

Если вы используете Spring 2.5+, вы можете использовать аннотации и создавать свои советы и Pointcuts.

Создать класс с @Aspect аннотацией.

Создайте @PointCut для определенного класса и определенного метода, а затем создайте @Around advice.

Вы можете прочитать краткий учебник, как это сделать, здесь:

http://veerasundar.com/blog/2010/01/spring-aop-example-profiling-method-execution-time-tutorial/

Это очень легко реализовать.

...