一、背景介绍
spring aop可以说是鼎鼎大名,但是说实话在实际工作中,用的其实并不多,别人不知道哈,反正我本人使用的次数说实话确实不多,纠其原因,我个人总结有以下两点
1、中途加入到项目组中,一些公共的业务逻辑已经由大神实现了
2、公共逻辑可以使用aop抽取,也可以不抽取,很多时候要不就是手懒不愿意抽取,要不就是压根想不起来使用aop(打完架了才想起来自己会武术)
二、简单使用案例
1、aop一般有两种拦截方式:
1.1、配置方法拦截表达式
1.2、自定义注解
2、以上两种方式,我倾向使用自定义注解的方式,原因嘛,那肯定是因为简单方便
3、代码示例
3.1、自定义注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MessageAddUnread {
String value() default "";
}
3.2、创建aop
@Slf4j
@Aspect
@Component
public class MessageAop {
@Pointcut("@annotation(com.gwm.peopleapp.community.annotation.MessageAddUnread)")
public void addUnreadCut() {
}
@After("addUnreadCut()")
public void addUnread(JoinPoint joinPoint) {
//获取目标方法
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
//获取目标方法的指定注解
MessageAddUnread annotation = method.getAnnotation(MessageAddUnread.class);
//获取注解的值
String value = annotation.value();
//获取目标方法的参数
Object[] args = joinPoint.getArgs();
//业务逻辑
}
}
3.3、使用的话,就很简单了,把注解加到需要拦截的方法上边,就OK了,稳稳当当,也不难
三、总结
网上经常流传着面试造火箭,工作拧螺丝,这句话我不敢苟同,工作中真的就不能造火箭吗?就算暂时不能造火箭,咋地也造个自行车啥的吧,关键是工作中遇到适合的业务时,我们愿不愿意走出熟悉的舒适圈,这很重要