前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AOP的两种实现方式

AOP的两种实现方式

作者头像
Mshu
发布2018-10-31 10:54:41
1.6K0
发布2018-10-31 10:54:41
举报
文章被收录于专栏:咸鱼不闲咸鱼不闲咸鱼不闲

大家都知道spring最大的特点就IOC和AOP,IOC是最常用的注入,就是被注入的类上加@Component注解,在需要用到时候,通过 @Autowired注入,不用每次都new出来。当然为了分清层级,@Component通常使用@Repository、@Service、@Controller代替。

本文只要记录AOP的用法,以springboot框架为例。

个人理解AOP就是拦截器,(可能是我理解不全面,反正我现在就认为它是拦截器,拦截器!拦截器!只不过娶个英文名字而已)。 功能:AOP可以在做某些事情之前或之后强塞一些操作。

我知道的有两种实现方法,路径切入和注解切入,区别在于切点,两者各有利弊,前者适合批量切入,后者比较灵活,加注解的类才会被切。

1、通过路径切入 2、通过注解切入

路径切入

1、新建切面类上面加俩注解 @Aspect @Component 缺一不可 2、@Pointcut写上要切入的包,也可以精确到类 3、@Before切入点之前要处理的业务 4、@After切入点之后要处理的业务

@Aspect
@Component
public class VisitAop {
    
  @Pointcut("execution(public * com.forum.controller.*.*(..))")
  public void log() {
  }

  @Before("log()")
  public void doBefore(JoinPoint joinPoint) {
        ........
  }
  
  @After("log()")
  public void doAfter() {
        ........
  }
}

注解切入

1、自定义注解 2、切入类@Aspect @Component 缺一不可 3、@Pointcut写上要切入注解(意思是带此注解者,必切!) 4、@Before、@After同上。

1、自定义注解 1.1 @Target和@Retention定义自定义注解,无需其他,标识作用的注解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface VisitCount {
}

3、切入点 3.1和路径切入的区别在此

@Pointcut("@annotation(com.Annotation.VisitCount)")

JoinPoint

此外可以了解一些doBefore(),的参数JoinPoint,以便操作业务;

1、joinPoint.getSignature().getDeclaringType().getSimpleName(),切入的类名 2、joinPoint.getArgs(),切入方法的参数数组 3、joinPoint.getSignature().getName(),切入方法名

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 路径切入
  • 注解切入
  • JoinPoint
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档