• 005 Aspectj的引入


    一 . 概述

      在之前我们了解了spring生成代理对象的过程,但是整个过程的配置是十分麻烦的.

      尽管spring提供了很多的解决方法,但是还是无法从根本上解决配置复杂的问题.

      如,name匹配等方式(这里不去说).

      而,作为业界最优秀的AOP框架,Aspectj的实现却相当的简单,因此spring引入了其使用的方式进行配置的简化.


    二 . 切面

      这个概念在之前没有介绍过,原因是之前的重点放在动态代理概念的介绍之中.

      所谓切面,就是一组逻辑相关的代码组合形成的类对象.这个概念十分的好理解.

    我们首先来声明一个切面: 

    @Aspect
    public class MyAspect {
        
    }

    我们在一个类之上标记了@Aspect注解就表示这个类是一个切面类.

    现在我们编写一个增强.

    public class RealSubject {
        
        public void test() {
            System.out.println("test...");
        }
    }

    首先我们编写了一个目标对象.

    @Aspect
    public class MyAspect {
        
        @Before("execution(* com.trek.aspect.RealSubject.test(..))")
        public void before() {
            System.out.println("before...");
        }
    }

    我们编写了一个方法,方法上面打上了一个@Before注解,表示这是一个前置通知.

      注解的参数是切入点表达式,表示的就是之前介绍的切入点的概念.

    现在我们将其配置在配置文件之中.

        <!-- 开启aop自动代理 -->
        <aop:aspectj-autoproxy proxy-target-class="true"/>
        
        <bean id="aspect" class="com.trek.aspect.MyAspect"></bean>
    
        <bean id="subject" class="com.trek.aspect.RealSubject"></bean>

    测试代码:

            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/trek/aspect/spring.xml");
            RealSubject subjct = (RealSubject) context.getBean("subject");
            subjct.test();

    我们惊奇的发现,我们现在使用AOP变得十分简单了.

  • 相关阅读:
    bootloader
    Arm中的c和汇编混合编程
    Linux学习笔记(一)
    java按所需格式获取当前时间
    java 串口通信 rxtx的使用
    Tomcat数据库连接池
    面试
    复习 模拟call apply
    复习 js闭包
    复习js中的原型及原型链
  • 原文地址:https://www.cnblogs.com/trekxu/p/9097702.html
Copyright © 2020-2023  润新知