Аспект не называется

Я пытаюсь вызвать аспект после выполнения метода. Но is даже не идет к коду внутри аспекта.

Вот мой класс конфигурации:

@Configuration
@PropertySource("classpath:auditorium.properties")
@ComponentScan(basePackages = { "com.epam.spring.hometask.*" })
@EnableAspectJAutoProxy
public class AppConfig {
      ///Bean definitions
}

Это мой аспект:

@Component
@Aspect
public class CounterAspect {

    @AfterReturning(pointcut = "execution(* com.epam.spring.hometask.service.EventService.getByName(..))", returning = "event")
    public void calculateAccessEventByNameCounter(Event event) {
        System.out.println("Aspect running");       
    }

Это сигнатура функции, которую я хочу предоставить с моим аспектом:

public Event getByName(String name);

И испытание:

@Test
    public void getByNameTest(){
        Event actualEvent = eventService.getByName("Test event 1");
    }

Ничего не печатается после вызова getByName

1 ответ

  1. Event event = new Event();
    event.getByName();
    

    Событие должно быть управляемым spring bean для аспектов, которые будут применяться, т. е. вы должны получить объекты типа Event из ApplicationContext следующим образом:

    ClassPathXmlApplicationContext context = 
        new ClassPathXmlApplicationContext("classpath:META-INF/Spring.xml");
    Event event = context.getBean(Event.class);
    

    или получить их вводится с помощью @Resource или @ Autowired аннотации.

    Затем вызов getByName () на объекте события будет проходить через прокси-сервер AOP, созданный Spring framework, и код в советах AOP, которые соответствуют определению метода, будет выполнен.

    Другой способ получить управляемый spring bean при создании объектов с помощью оператора new — использование аннотации @Configuration.