@sulik93
Начал изучать Java. Продолжаю изучать Java.

Как подключить Аспект, используя аннотации?

Всем привет!
Осваиваю аспекты.
Есть класс с методом:
public class GreetingServiceImpl implements GreetingService{

    @Override
        public String sayGreeting() {
        return "Greeting, user!";
    }
}


Хочу подключить аспект к этому методу.
Создаю класс:
package lessons.started;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class AspectTest {

    @Pointcut("execution(* lessons.started.GreetingServiceImpl.sayGreeting(..))")
    public void performance() {
    }

    @Before("performance()")
    public void befor() {
        System.out.println("Before running");
    }

    @AfterReturning("performance()")
    public void after() {
        System.out.println("After running");
    }
}


контекст получаю так:
ApplicationContext context = new AnnotationConfigApplicationContext(LessonsConfiguration.class);


класс LessonsConfiguration:
@Configuration
public class LessonsConfiguration {

    @Bean
    @Qualifier("main")
    public GreetingService greetingService(){
        return new GreetingServiceImpl();
    }
}


При этом советы не выполняются.
Как система поймет, что нужно использовать созданный аспект?
  • Вопрос задан
  • 819 просмотров
Пригласить эксперта
Ответы на вопрос 1
@igor_suhorukov
Добрый день!

>>Как система поймет, что нужно использовать созданный аспект?

Если про сам aspectj, то он может внедрять аспект (weaving) в код во время компиляции или загрузки класса. Во время загрузки класса нужно указать java агент aspectj при старте jvm( -javaagent: ) и добавить META-INF/aop.xml ( либо указать -Dorg.aspectj.weaver.loadtime.configuration если aop.xml расположен в другом месте). Другой вариант внедрения аспектов при компиляции и сборки проекта.

Но поскольку у вас Spring, то проблема решается проще "11.2.1 Enabling @AspectJ Support" в XML конфигурации, либо @EnableAspectJAutoProxy если конфигурация в коде
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы