天天看点

重新学习之spring第二个程序,配置AOP面向切面编程

第一步:在配置好的ioc容器的基础上,导入面向切面编程所需要的jar包

(本案例用的是spring3.2.4,由于spring3.2.4的官网jar包中不再有依赖包,所以依赖包都是从网上找的)

重新学习之spring第二个程序,配置AOP面向切面编程

第二步:配置applicationContext.xml(包括ioc对象配置,以及面向切面编程的相关配置)

重新学习之spring第二个程序,配置AOP面向切面编程
重新学习之spring第二个程序,配置AOP面向切面编程

View Code

第三步:在appliactionContext.xml中指定的面向切面编程的代理切面类。

重新学习之spring第二个程序,配置AOP面向切面编程
重新学习之spring第二个程序,配置AOP面向切面编程

第四步:测试面向切面编程的demo(省去了action,dao包下的类的源代码)

重新学习之spring第二个程序,配置AOP面向切面编程
重新学习之spring第二个程序,配置AOP面向切面编程

测试截图

重新学习之spring第二个程序,配置AOP面向切面编程

AOP介绍

   Aspect Oriented Programing 面向切面编程

    (1)如果说面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系的话;

    (2)面向方面编程则是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即 可。

  AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。

     (1)前面我们讲的struts2中的拦截器,就是AOP的一种实现!

AOP的内部实现都是通过动态代理来实现。动态代理有两种常见的方式:

  1.    JDK提供的代理生成方式(Proxy,  InvocationHandle)

  2.    cglib 类库(spring和hibernate使用它)

AOP基本概念

}    连接点(Joinpoint)

◦     在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。

}    切入点(Pointcut)

◦    匹配连接点(Joinpoint)的断言(是一种连接点的条件,判断特征)。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

    -->public void com.bjsxt.dao.userDao.*.*()

              :所有userDao包下的无返回值,无参数传入的,公共方法

    -->public *()

              :所有的公共方法

    -->public void com.bjsxt.dao.userDao.*.(..)

              :所有userDao包下的有参传入的无返回值的,公共的方法。

}    通知(Advice)

◦    在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。

增强功能的代码编写区 。如日志记录,访问控制,增强功能。

}    切面(Aspect)

◦    一个关注点的模块化,这个关注点可能会横切多个对象。

包含了:连接点、切入点、通知。可以通过@Aspect定义为一个类

}    目标对象(Target Object)

     说白话就是----》委托类

◦    被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做被通知(advised) 对象。

}    织入(Weaving)

        制作代理类,和代理对象的过程

◦    把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。

通知的类型

}    前置通知(Before advice)

◦    在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。

}    返回后通知(After returning advice)

◦    在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。

}    抛出异常后通知(After throwing advice)

◦    在方法抛出异常退出时执行的通知。

}    后通知(After (finally)advice)

◦    当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

}    环绕通知(Around Advice)

◦    包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。