У меня нет 50 повторений, чтобы комментировать вопрос, так что вот еще один ответ, относящийся к @ Jitendra Vispute ответу.Официальный документ Spring упоминает:
Вы можете зарегистрировать классы аспектов как обычные bean-компоненты в вашей конфигурации Spring XML или автоматически определять их посредством сканирования пути к классам - как и любой другой bean-объект, управляемый Spring.Однако обратите внимание, что аннотации @Aspect недостаточно для автоопределения в пути к классам: для этого вам необходимо добавить отдельную аннотацию @Component (или, альтернативно, нестандартную аннотацию стереотипа, которая соответствует правилам сканера компонентов Spring). Источник: Spring '4.1.7.Release' документация .
Это будет означать, что добавление аннотации @Component и добавление @ComponentScan в вашу конфигурацию приведут к примеру @Jitendra VisputeРабота.Для примера весенней загрузки это работает, хотя я не возился с обновлением контекста. Пример весенней загрузки :
Приложение :
package sample.aop;
@SpringBootApplication
public class SampleAopApplication implements CommandLineRunner {
// Simple example shows how an application can spy on itself with AOP
@Autowired
private HelloWorldService helloWorldService;
@Override
public void run(String... args) {
System.out.println(this.helloWorldService.getHelloMessage());
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleAopApplication.class, args);
}
}
Приложение также должно работать как простое приложение Spring Framework со следующими аннотациями вместо @SpringBootApplication:
- @ Configuration
- @ EnableAspectJAutoProxy
- @ ComponentScan
и AnnotationConfigApplicationContext вместо SpringApplication.
Служба :
package sample.aop.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class HelloWorldService {
@Value("${name:World}")
private String name;
public String getHelloMessage() {
return "Hello " + this.name;
}
}
Аспект монитора :
package sample.aop.monitor;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class ServiceMonitor {
@AfterReturning("execution(* sample..*Service.*(..))")
public void logServiceAccess(JoinPoint joinPoint) {
System.out.println("Completed: " + joinPoint);
}
}