每当调用someFunction()函数时,我都会尝试输出日志消息。
这是我的看点:
@Aspect
@Component
public class MyAspect {
private static final Logger LOGGER = Logger.getLogger(MyAspect.class.getName());
@Pointcut("execution(com.practice.AOP.someFunction())")
public void outputLogMessage() {
LOGGER.info("someFunction has been invoked");
}
}
我试图拦截someFunction()的方法是在com.practice.AOP类中。当我调用它时(如下所示),我的建议(日志消息)不输出,也不会出错。我究竟做错了什么? Pointcut甚至可以走了吗?
@SpringBootApplication
public class AOP {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
someFunction();
}
public static void someFunction() {
//should invoke the log message
}
}
答案 0 :(得分:0)
Spring AOP仅适用于Spring bean,并且仅在从外部调用的那些spring bean的公共实例方法上(即this.publicMethod()
样式调用将不起作用,因为它们不通过Spring AOP创建的代理建议你的春豆。
如果这对您来说还不够,例如,如果您不仅需要建议使用spring bean而且还要提供非Spring托管代码,或者在示例中提供静态方法,则需要切换到本机AspectJ支持,或者通过编译时间编织,或通过加载时间编织。