Spring AOP не видит метод , просто выводится "You took your book"

Аспект:

package com.aspects;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;


@Aspect
@Component
public class logging_aspects {
    @Before("execution(public void com.aop.library.getBook())")
    public  void  BeforeGetBookAdvice(){
        System.out.println("Before advice : getBook");
    }

}

Файл конфигурации:

package com.aop;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@ComponentScan("com/aop")
@EnableAspectJAutoProxy
public class aop_config {
}

Вот сам метод:

package com.aop;

import org.springframework.stereotype.Component;

@Component()
public class library {
    public void getBook(){
        System.out.println("You took your book!");
    }
}

Ответы (1 шт):

Автор решения: iramm
  1. Необходимо поместить бин аспекта в контекст:

     public class aop_config {
    
         @Bean
         public logging_aspects aspect() {
             return new logging_aspects();
         }
    

@Aspect не является стереотипной аннотацией. @Component тоже не сработал.

  1. В методе main() нужно вызывать метод бина типа library. Тогда логика аспекта выполнится.

    public class Main {
         public static void main(String[] args) {
             AnnotationConfigApplicationContext c = new 
                 AnnotationConfigApplicationContext(aop_config.class);
    
             logging_aspects service = c.getBean(logging_aspects.class);
             System.out.println(service);
    
             library libr = c.getBean(library.class);
             libr.getBook();
         }}
    

В методе добавлена проверка присутствия в контексте бина-аспекта.

→ Ссылка