【发布时间】:2021-07-22 06:23:49
【问题描述】:
我正在尝试对 jar 中的方法进行切入,但它没有被正确触发
我的休息端点代码如下:
package com.example.log.javatpoint;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Test{
@Autowired
Operation op;
private static final Logger LOG = LogManager.getLogger(Test.class);
@RequestMapping(value = "/customs", method = RequestMethod.GET)
public String custom() {
op.msg();
op.display();
LOG.info("Hello World");
LOG.info("Hello {0}", "World 2");
return "custom";
}
}
操作类:
@Component
public class Operation{
public void msg(){System.out.println("msg() is invoked");}
public void display(){System.out.println("display() is invoked");}
}
@Aspect
@Component
public class TrackOperation
{
@Pointcut("execution(* Operation.*(..))")
public void abcPointcut(){}
@Around("abcPointcut()")
public Object myAdvice(ProceedingJoinPoint pjp) throws Throwable
{
System.out.println("Additional Concern Before calling actual method");
Object obj=pjp.proceed();
System.out.println("Additional Concern After calling actual method");
return obj;
}
@Pointcut("execution(* org.apache.logging.log4j.LogManager.info(..))")
public void abcPointcutLog(){}
@Around("abcPointcutLog()")
public Object myAdviceLog(ProceedingJoinPoint pjp) throws Throwable
{
System.out.println("Additional Concern Before calling actual method");
Object obj=pjp.proceed();
System.out.println("Additional Concern After calling actual method");
return obj;
}
}
注意:切入点适用于 Operation 类,因为切入点不适用于 org.apache.logging.log4j.LogManager 尝试还提供 org.apache.logging.log4j.Logger 切入点。
我希望输出为:
Additional Concern Before calling actual method
2019-09-24 12:28:58.540 INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test : Hello World
Additional Concern After calling actual method
Additional Concern Before calling actual method
2019-09-24 12:28:58.540 INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test : Hello {0}
Additional Concern After calling actual method
但实际输出是:
2019-09-24 12:28:58.540 INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test : Hello World
2019-09-24 12:28:58.540 INFO 10076 --- [nio-8080-exec-1] com.example.log.javatpoint.Test : Hello {0}
【问题讨论】:
标签: spring-aop