005 Aspectj的引入

一 . 概述

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

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

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

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


二 . 切面

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

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

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

@Aspect
public class MyAspect {
    
}

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

扫描二维码关注公众号,回复: 1056970 查看本文章

现在我们编写一个增强.

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变得十分简单了.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/9097702.html
005