springboot引⼊AOP切⾯@Aspect注解使⽤<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
*/
@Aspect
@Component
@Slf4j
public class HttpAspect {
/**
* ⽇志切点
*/
@Pointcut("execution(public * ller..*.*(..))")
public void log() {
}
/**
* 开始请求前
*
* @param joinPoint
*/
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
/
/ 主类
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestAttributes();
if (attributes != null){
HttpServletRequest request = Request();
// url 路径
log.info("请求={}", RequestURL() + " | method=" + Method() + " | ip=" + RemoteAddr());
// 类⽅法
log.info("⽅法={}", Signature().getDeclaringTypeName() + "." + Signature().getName());
// 参数
log.info("参数={}", Args()));
}
}
/**
* 返回处理
*
* @param result
*/
@AfterReturning(returning = "result", pointcut = "log()")
public void doAfterReturning(Object result) {
log.info("返回={}", JSON(result));
}
任何的public⽅法
execution(public * *(..))
以set开始的⽅法
execution(* set*(..))
定义在cn.freemethod.business.pack.Say接⼝中的⽅法
execution(* cn.freemethod.business.pack.Say.*(..))
任何cn.freemethod.business包中的⽅法
execution(* cn.freemethod.business.*.*(..))
springboot aop任何定义在service包或者其⼦包中的⽅法
execution(* cn.freemethod.business..*.*(..))
其他表达式
任何在service包中的⽅法
service.*)
任何定义在service包或者其⼦包中的⽅法
service..*)
任何实现了service.AccountService接⼝中的⽅法
service.AccountService)
任何⽬标对象实现了service.AccountService的⽅法
service.AccountService)
⼀般情况下代理类(Proxy)和⽬标类(Target)都实现了相同的接⼝,所以上⾯的2个基本是等效的。
有且只有⼀个Serializable参数的⽅法
args(java.io.Serializable)
只要这个参数实现了java.io.Serializable接⼝就可以,不管是java.io.Serializable还是Integer,还是String都可以。⽬标(target)使⽤了@Transactional注解的⽅法
@target(ansaction.annotation.Transactional)
⽬标类(target)如果有Transactional注解中的所有⽅法
@within(ansaction.annotation.Transactional)
任何⽅法有Transactional注解的⽅法
@annotation(ansaction.annotation.Transactional)
有且仅有⼀个参数并且参数上类型上有Transactional注解
@args(ansaction.annotation.Transactional)
注意是参数类型上有Transactional注解,⽽不是⽅法的参数上有注解。
bean的名字为tradeService中的⽅法
bean(simpleSay)
bean名字为simpleSay中的所有⽅法。
bean名字能匹配
bean(*Impl)
bean名字匹配*Impl的bean中的所有⽅法。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。