Spring AOP的应用场景:
AOP为IOC的使用提供了很多便利,一方面应用可以直接使用AOP的功能,设计应用的横切关注点,把跨越应用程序多个模块的功能抽象出来,并通过简单的AOP使用,灵活的编制到模块中,比如可以通过AOP实现应用程序中的日志功能。另一方面在Spring内部,一些支持模块也是通过SpringAOP实现的,比如事务处理。
Spring AOP的核心技术是动态代理:
动态代理模式:
静态类图
subject为对象访问接口,RealSubject实际对象和Proxy代理对象都实现了该接口,所以在client访问实际对象的时候会先被代理对象拦截下来,加入额外处理的动作。
Proxy时序图
Spring以动态代理为基础,设计出了一系列AOP的横切实现,比如前置通知、返回通知、异常通知等
对于使用Spring AOP的应用,ProxyFactoryBean和ProxyFactory都提供了AOP功能封装,只是使用ProxyFactoryBean可以在IOC容器中完成声明式配置,而使用ProxyFactory,则需要编程式使用Spring AOP的功能。
AOP的实现:1、为目标建立代理对象 2、启动代理对象的拦截器来完成各种横切面的织入
JDK1.3以上实现了动态代理的特性,即可以为任意的java对象创建代理对象。但同时也可以通过第三方类生成器CGLIB来实现代理对象的建立,一般而言,默认方式是使用JDK来产生AopProxy代理对象,但如果遇到配置的目标不是接口类的实现,会使用CGLIB来产生AopProxy代理对象。
1、JDK实现代理对象
JDK的动态代理的特性是通过Java Reflection API来实现的,java的reflection包中有Proxy对象,该对象类似于Proxy模式中的Proxy对象。在使用时还需要为代理对象设计一个回调方法,该回调方法的作用是在其中加入作为代理需要的额外处理的动作即preOperation和postOperation方法。
在JDK中需要实现InvocationHandler接口。
/*
*proxy 代理对象实例
*method 被调用的方法
*args 调用方法的参数*/
public interface InvocationHandler {
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable;
}
在通过Porxy.newInstance方法生成具体的Proxy对象时将InvocationHandler设置到参数里面就可以让invoke方法和Proxy联系起来了。
2、CGLIB生成代理对象
1、配置Enhancer对象,通过Enhancer对象生成代理对象,
2、设置Enhancer的callback回调,如JDK的Proxy对象的invoke回调方法一样。
建立AopProxy代理对象的过程
1、配置ProxyFactoryBean
1)定义使用的通知器,
2)定义ProxyFactoryBean,把它作为一个Bean来定义,它是封装AOP功能的主要类。
3)定义target属性,目标对象
2、ProxyFactoryBean生成AopProxy代理对象
ProxyFactoryBean的AOP实现需要依赖JDK或者CGLIB提供的Proxy特性。
相关推荐
Spring 框架之 AOP 原理剖析.html 抓下来打包成了HTML文件, 方便离线观看
Spring框架-AOP和声明式事务
16.2 Spring框架-AOP面向切面编程
spring AOP,静态代理,动态代理,cglib,Spring整合Mybatis 与三,SpringAOP文章相对应
对Spring框架中的AOP的介绍,能够全面了解Spring中AOP的功能和使用方法。
本资源通过一个Category和Publisher表的实例,使用Spring框架实现AOP切面编程,其中实现了增删改查的功能,通过事物(tx)管理器、扫描业务逻辑、声明式事务达到切面编程效果。代码中有很详细的备注,适合新手入门
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象...
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
找了很久,也没在网上找到spring mvc框架下的aop例子~研究了好久终于写出来了~拿出来和大家分享一下~
Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。
除了Spring的aop,还有AspectJ框架的aop,这里是在Spring框架中使用AspectJ框架实现AOP的补充jar包,还有一个jar包会随着Spring框架的版本更新而更新。这也是分开成spring框架包和在Spring框架中使用AspectJ框架实现...
核心容器。提供Spring框架的基本功能,其主要组件是BeanFactory,是工厂模式的实现。...Spring AOP 模块直接将面向方面编程的功能集成到Spring框架中。它为基于Spring 应用程序的对象提供了事务管理服务。
spring2-aop.pdf:深入spring2 轻量级J2EE开发框架原理及实践
关于Spring的IOC和AOP的例子,帮助初学者入门。 内有bean的声明、注入;切入点和通知等功能例子。 环境配置:myeclipse, spring2.5
Spring框架AOP静态代理
SpringAOP动态代理 Spring AOP 使用的动态代理主要有两种方式:JDK 动态代理和 CGLIB 代理。 JDK 动态代理:用于代理实现了接口的类。Spring 会使用 java.lang.reflect.Proxy 类来创建代理对象。 CGLIB 代理:用于...
spring 实现AOP不仅仅需要自己的jar包,还需要第三方的jar,分别是 aspectjrt.jar,aspectjweaver.jar,aopalliance-1.0.jar,将这三个jar包放入项 目中就可以spring的aop编程了。其中我还放入了spring-aop.jar和spring...
基于注解配置和使用spring AOP(spring mvc框架)
Spring框架(Spring Framework)有自己的AOP框架,在概念上很容易理解,它成功地解决了Java企业编程中80%的AOP需求。 本文档也讲解Spring与AspectJ的集成,就特征而言,AspectJ是Java企业空间中目前最丰富的、最成熟...
Spring框架是一个开放源代码的J2EE应用程序框架,是对bean的生命周期进行管理的轻量...Spring框架主要由七部分组成,分别是Spring Core,Spring AOP,Spring ORM,Spring DAO,Spring Context,Spring Web和Spring Web MVC。