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
→ Ссылка
Необходимо поместить бин аспекта в контекст:
public class aop_config { @Bean public logging_aspects aspect() { return new logging_aspects(); }
@Aspect не является стереотипной аннотацией.
@Component тоже не сработал.
В методе 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(); }}
В методе добавлена проверка присутствия в контексте бина-аспекта.