zoukankan      html  css  js  c++  java
  • 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变得十分简单了.

  • 相关阅读:
    高精度 模板
    《图论》邻接表
    模板整理
    H
    C
    同余定理的应用(处理大数
    H
    1153: 简易版最长序列
    1152: 二分搜索
    1151: 大整数加法(正数)
  • 原文地址:https://www.cnblogs.com/trekxu/p/9097702.html
Copyright © 2011-2022 走看看