实用-AOP切入方法执行
1.描述
用springaop切入一个方法,做一些业务。
代用自定义注解形式,可以自定义指定注解属性含义。
2.代码
2.1自定义注解
package vip.mate.marketing.config.aop; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解 MessageAuto,用来标注自动发送通知消息的地方 * * @author zhangpan * @date 2023-04-03 09:15:13 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MessageAuto { String type() default ""; //业务类型 String value() default ""; //值 }
2.2注解执行切面
其中,publishVO是个实体类
package vip.mate.marketing.config.aop; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import vip.mate.marketing.paramvo.PublishVo; import java.lang.reflect.Method; /** * MessageAutoAspect,自定义注解执行 * 万能小切入 * * @author alspd * @date 2023-04-03 09:15:13 */ @Aspect @Component @Slf4j public class MessageAutoAspect { @Pointcut("@annotation(MessageAuto)") public void operatePointCut() { } @Around("operatePointCut()") public boolean pushMessage(ProceedingJoinPoint point) throws Throwable { Object[] args = point.getArgs(); log.info("args:{}", args); MethodSignature signature = (MethodSignature) point.getSignature(); Method method = signature.getMethod(); MessageAuto messageAuto = method.getAnnotation(MessageAuto.class); String value = messageAuto.value(); String type = messageAuto.type(); log.info("type:{},value:{}", type, value); //消息入库 if ("publish".equalsIgnoreCase(type)) { PublishVo publishVo = (PublishVo) args[0]; Long userId = (Long) args[1]; log.info("publishVo:{}", publishVo); log.info("userId:{}", userId); } point.proceed(); return true; } }
2.3注解使用
2.4打印结果
3.总结
这就是aop简单使用,业务部分,可自由扩展。