Spring AOP-我想将切入点应用于库中的类

时间:2019-05-20 16:03:16

标签: java spring aop

我正在尝试使用Spring AOP将日志添加到来自第三方库的方法中。因此,Spring Boot应用程序正在使用一个类ProxyServlet,我只想对其应用日志记录。

@Pointcut("within(com.common.httpproxy.ProxyServlet)")
    private void proxyServlet() {}

    @Before("proxyServlet()")
    public void testLog() {
        log.info("THIS IS WORKING");
    }

这只是一些测试AOP代码。我知道我的Spring AOP已经设置好了,因为我可以获得代码库中包含的任何类的日志输出。但是,我无法从ProxyServlet之类的第三方库获取任何类的日志输出。

有什么我可以做的才能使AOP建议生效?预先感谢。

2 个答案:

答案 0 :(得分:0)

您应该使用以下代码注释包含此代码的类:

@Aspect
@Component

答案 1 :(得分:0)

假设ProxyServer实例是一个bean,则可以通过定义一个如下所示的方面来实现它。

@Aspect
public class LoggingAspect {    
        @Before(execution(* the.package.ProxyServlet.*(..)))
        public void loggingAdvice(JoinPoint joinPoint){
            System.out.println("Started loggingAdvice on method="+joinPoint.toString());
            System.out.println("The aruguments are =" + Arrays.toString(joinPoint.getArgs()));
        }

    } 

请注意,这里不需要像@LoggingAdvice这样的自定义切入点并使用它来注释目标方法(我指的是,因为您提到该类在第三方库中,这意味着您要表达担心您可能无法使用切入点注释meothod)。自定义切入点在定义广泛适用的方面并将其应用限制在某些联合品脱时(通过自定义切入点)非常有用 由于您的目标是一个单一的类,并且是第三方库,因此无需定制切入点,但是具有专门针对所需类的方面,您会很好。 上面定义的Aspect将针对ProxyBean类中定义的每个方法执行。