Spring Aop 简单实现

  • Spring Aop
    • 简单解释
    • Spring Aop 的实现方式
  • Spring Aop 简单实现
    • AspectsJ注解驱动的切面简单实现
      • 编写切面代码
      • 使用并验证
    • 一些常用的注解
      • 切面接口类上使用的注解
      • 切面实现方法上使用的注解
  • 参考文章

声明:本文参考网上资料和自己简单实践整理而成,只为梳理记录。如有错误望不吝赐教。在此拜谢!持续完善修改中…

Spring Aop

简单解释

Aop简单的说,就是在不侵入原有代码的基础上对原有功能加强。

Spring Aop 的实现方式

  • 经典的基于代理的Aop
  • @AspectsJ注解驱动的切面
  • 纯POJO切面
  • 注入式AspectJ切面

Spring Aop 简单实现

@AspectsJ注解驱动的切面简单实现

编写切面代码

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

}
@Aspect
@Component
public class XmyAopAspectJTest {

    private static final Logger LOGGER = LogManager.getLogger(XmyAopAspectJTest.class);

    @Pointcut("@annotation(com.xmy.aop.XmyAopTest)")
    public void pointCut() {}

    @Before("pointCut()")
    public void before(JoinPoint joinPoint)
            throws InvocationTargetException, IllegalAccessException {
        LOGGER.info("---------------XmyAopAspectJTest before---------------------------------------------------");
    }

完成以上的步骤后,在 spring 的配置文件中加入,而后Spring就能够自动扫描被 @Aspect 标注的切面了

使用并验证

在方法上打上@XmyAopTest注解,运行得到结果如下:

20171013-15:49:25.156 [http-bio-8082-exec-7] INFO  99a34a70 c.l.g.a.w.a.XmyAopAspectJTest(XmyAopAspectJTest.java:26) [${cp:token}] - ---------------XmyAopAspectJTest before---------------------------------------------------
20171013-15:49:25.168 [http-bio-8082-exec-7] INFO  99a34a70 c.l.g.a.w.c.SerialBusinessController(SerialBusinessController.java:70) [${cp:token}] - 移动端查找交易单的连环单列表 curBusinessId:1000105917,exterBusinessId:null
20171013-15:49:27.937 [http-bio-8082-exec-7] INFO  99a34a70 c.l.f.u.BeanToMapUtil(BeanToMapUtil.java:28) [${cp:token}] - BeanToMapUtil.toMap params : {"currentPage":1,"pageSize":10}
20171013-15:49:28.679 [http-bio-8082-exec-7] INFO  99a34a70 c.l.g.a.w.a.XmyAopAspectJTest(XmyAopAspectJTest.java:31) [${cp:token}] - ---------------XmyAopAspectJTest after---------------------------------------------------

以上,我们进行了一个小小的例子,接下来就来解开它神秘的面纱吧。

一些常用的注解

切面接口类上使用的注解

注解 说明 备注
@Documented 会被javadoc工具处理
@Retention 描述注解的生命周期
@Target 描述注解作用的范围

切面实现方法上使用的注解

注解 说明 备注
@Pointcut 切点 expression表达式 signature 签名
@Around 同时在方法前和后加强 指定切点
@Before 在方法执行之前加强 指定切点
@After 在方法执行之后加强 指定切点

参考文章

参考一
参考二

你可能感兴趣的:(从0到1了解)