Pointcut не работает с Spring AOP

Чтобы реализовать ведение журнала с использованием Spring AOP, я выполнил следующие простые шаги. Но похоже, что это не работает. Любая помощь будет полезна

1) Создан класс MyLoggingAspect

    import org.aspectj.lang.ProceedingJoinPoint;

public class MyLoggingAspect
{

    public MyLoggingAspect() {
        super();
        System.out.println("Instantiated MyLoggingAspect");     
    }

    public Object log(ProceedingJoinPoint call) throws Throwable
    {
        System.out.println("from logging aspect: entering method [" + call.toShortString()
                            +"] with param:"+call.getArgs()[0] );

        Object point =  call.proceed();

        System.out.println("from logging aspect: exiting method [" + call.toShortString()   
                            + "with return as:" +point);        

        return point;
    }

}

2) Создал класс (TixServiceImpl), в котором я хочу вести журнал

public class TixServiceImpl implements TixService{

    @Override
    public void calculateSomething() {
        String s = "did some calculation..";
        System.out.println(s);
    }

    @Override
    public String getTixName() {
        return null;
    }
}

3) Создал файл весна-аспектj.xml

<beans...    
    <bean id = "LoggingAspect"  class = "MyLoggingAspect"/>
    <aop:config>
          <aop:aspect ref = "LoggingAspect">
             <aop:pointcut id = "myCutLogging"
                    expression = "execution(* TixService*.*(..))"/>
             <aop:around pointcut-ref = "myCutLogging" method = "log"/>
          </aop:aspect>
    </aop:config>    
</beans>

4) Создал простой тестовый клиент (TixClient)

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TixClient {

    public static void main(String[] a){

        ApplicationContext context = new FileSystemXmlApplicationContext("conf/spring-aspectj.xml");

        TixService tix = new TixServiceImpl();
        tix.calculateSomething();
        String s = tix.getTixName();

        System.out.println("End of the the client invocation!!"); 
    }   
}

5) Это дает мне следующий Выход

...
Instantiated MyLoggingAspect
did some calculation..
End of the the client invocation!!
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
7 483
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я просто проверяю ваш код, но у меня есть подозрение, что проблема в том, что вы не получаете свой экземпляр TixServiceImpl из Spring, а скорее вручную создаете его экземпляр в своем TixClient. Я думаю, что ваш TixService должен быть bean-компонентом Spring, полученным из Spring ApplicationContext, чтобы Spring имел возможность настроить аспекты в возвращаемом экземпляре.

Спасибо за подсказку, сработало. Было бы хорошо, если бы это было упомянуто в примерах / примерах / учебных пособиях, доступных в Интернете.

a-sak 19.01.2009 06:38

Скотт Бэйл прав: пусть spring создаст для вас экземпляр Tix ServiceImpl. Также в подобных случаях включение журнала Springs может помочь, потому что оно сообщает вам, сколько целей для аспекта / сервиса было найдено.

Как включить весеннюю вырубку?

Grant Cermak 30.12.2010 23:56

В документации Spring представлены различные способы включения ведения журнала: static.springsource.org/spring/docs/3.0.x/…

tobsen 01.01.2011 17:42

Другие вопросы по теме