初始化一个基础的 aop 程序
// 作为演示程序,没有更具体的方法体
@slf4j
@component
@aspect
public class tryaspect {
@before("execution(* biz.baijing.service.impl.deptserviceimpl.*(..))") // * 任意方法 , .. 形参任意
public void before(){
log.info("before ...");
}
public void after(){
log.info("after ...");
}
public void around(){
log.info("around before ...");
// 调用目标方法
log.info("around after");
}
public void afterreturning(){
log.info("afterreturning ...");
}
public void afterthrowing(){
log.info("after throwing ...");
}
}
before

注意编辑器这个位置的 m 的变化。

点击 m 提示了
@before("execution(* biz.baijing.service.impl.deptserviceimpl.*(..))") 切面目标的方法。
around

before 是半圆;around 是完整的圆形。
同样点击会出现 execution 的指向的目标方法

注解: m = methods
对 around 方法,完善之后
@around("execution(* biz.baijing.service.impl.deptserviceimpl.*(..))")
public object around(proceedingjoinpoint proceedingjoinpoint) throws throwable{
log.info("around before ...");
// 调用目标方法
object proceed = proceedingjoinpoint.proceed();
log.info("around after");
return proceed;
}advise — 通知
方法体,是抽取的一组公共的实现逻辑。
log.info("around before ...");
// 调用目标方法
object proceed = proceedingjoinpoint.proceed();
log.info("around after");
return proceed;pointcut — 切入点
方法实际针对的目标方法的引入,是aop方法和目标类方法的连接;
通过切入点表达式关联。
"execution(* biz.baijing.service.impl.deptserviceimpl.*(..))"
备注: * : 所有 deptserviceimpl 下的方法 ; .. : 形参任意。
acpect — 切面
advise 和 pointcut 的连接。
@around("execution(* biz.baijing.service.impl.deptserviceimpl.*(..))")
public object around(proceedingjoinpoint proceedingjoinpoint) throws throwable{
log.info("around before ...");
// 调用目标方法
object proceed = proceedingjoinpoint.proceed();
log.info("around after");
return proceed;
}描述这个方法的类,就叫: 切面类。
@slf4j
@component
@aspect
public class tryaspect {
@before("execution(* biz.baijing.service.impl.deptserviceimpl.*(..))") // * 任意方法 , .. 形参任意
public void before(){
log.info("before ...");
}
public void after(){
log.info("after ...");
}
@around("execution(* biz.baijing.service.impl.deptserviceimpl.*(..))")
public object around(proceedingjoinpoint proceedingjoinpoint) throws throwable{
log.info("around before ...");
// 调用目标方法
object proceed = proceedingjoinpoint.proceed();
log.info("around after");
return proceed;
}
public void afterreturning(){
log.info("afterreturning ...");
}
public void afterthrowing(){
log.info("after throwing ...");
}
}
tryaspect —— 切面类。
target — 目标对象
biz.baijing.service.impl.deptserviceimpl
deptserviceimpl —— 就是目标对象。
joinpoint — 连接点
被 aop 控制的对象方法,即:
biz.baijing.service.impl.deptserviceimpl
下的所有方法

这里被 红色 m 标识的方法就是 joinpoint 。
结果

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论