如何使用SpringBoot AOP拦截单个方法
How to intercept a single method using SpringBoot AOP
我试图在调用函数 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 class 中。当我调用它时(如下所示),我的建议(日志消息)没有输出,也没有收到错误。我究竟做错了什么?切入点是否可行?
@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
}
}
Spring AOP 仅适用于 Spring bean,并且仅适用于从外部调用的那些 spring bean 的 public 实例方法(即 this.publicMethod()
样式调用将不起作用,因为它们不会通过 Spring AOP 创建的代理来通知您的 spring bean。
如果这对您来说还不够,例如,如果您不仅需要建议 spring bean,还需要建议非 spring 托管代码,或者像您示例中的静态方法,您将需要通过编译时编织或加载时编织切换到本机 AspectJ 支持。
我试图在调用函数 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 class 中。当我调用它时(如下所示),我的建议(日志消息)没有输出,也没有收到错误。我究竟做错了什么?切入点是否可行?
@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
}
}
Spring AOP 仅适用于 Spring bean,并且仅适用于从外部调用的那些 spring bean 的 public 实例方法(即 this.publicMethod()
样式调用将不起作用,因为它们不会通过 Spring AOP 创建的代理来通知您的 spring bean。
如果这对您来说还不够,例如,如果您不仅需要建议 spring bean,还需要建议非 spring 托管代码,或者像您示例中的静态方法,您将需要通过编译时编织或加载时编织切换到本机 AspectJ 支持。