SpringAOP的实现过程
来源:互联网 发布:傅园慧网络直播平台 编辑:程序博客网 时间:2024/05/24 08:32
SpringAop作为Spring的核心模块,通过该模块可以横向抽取一些公共方法,使我们能更好的面向模块开发程序;
AOP的几个基本概念,通知(有方位信息实现不同的Advice接口)、切点(通过正则或其他匹配方式来完成匹配,都实现Pointcut顶层接口,对象有matches()方法)、通知器Advisor(封装通知和切点的对象)等。在这些基础的定义后,通过Spring容器进行横向织入,实现AOP。
Spring AOP主要是通过目标对象的代理,拦截器拦截回调,实现功能的。所以首先是要获取代理对象;这一步是以ProxyConfig、AdvisedSupport、ProxyCreatorSupport和它的三个子接口AspectJProxyFactory、ProxyFactory、ProxyFactoryBean来产生代理对象;下面的三个子接口是产生代理对象的三种方式,AspectJProxyFactory是使用AspectJ的AOP实现的,ProxyFactory是通过编程设置组件形式产生的,而ProxyFactoryBean是通过声明式配置方式,完成AOP功能,所以可采用第三种方式;
在使用ProxyFactoryBean产生代理对象时,首先需要1、通知器的获取(封装在AdvisedSupport中);2、设置ProxyFactoryBean所需的代理接口、通知器名称、目标target等;有了这些组件,便可以在ProxyFactoryBean中进行生产代理对象。ProxyFactoryBean会通过getObject()方法获取实例FactoryBean,其中封装了所需要的拦截器,target等配置,为获取代理对象准备好了条件,然后借助AopProxy接口下的具体实现类(动态代理类JdkDynamicAopProxy或者CGLIB的CglibProxyFactory)来生成具体的代理对象,器AopProxy的实例也是由AopProxyFactory的默认实现类DefaultAopProxyFactory来完成。
创建好代理对象之后,下一步来分析如何完成目标对象增强的织入。首先当对目标对象进行方法调用时,由于JVM的拦截机制,方法的调用会被代理对象拦截,然后完成AOP作用的功能实现主要是在继承InvocationHandle接口的handle实例中的invoke()方法,它可以完成目标方法的回调;同时,在这个invoke()方法中封装了拦截器链ReflectiveMethodInvocation对象,其中每一个拦截器都封装了带有切点的通知器,切点中含有matches()方法可以判断是否在某一切点实现织入增强;ReflectiveMethodInvocation对象中还有一个proceed()方法,可以获取下一个拦截器,沿着链行进,完成所有的匹配过程。
- SpringAOP的实现过程
- SpringAOP的实现
- SpringAOP的实现方式
- springAOP的简单实现
- SpringAOP的实现原理
- SpringAOP的实现
- springAOP 实现事务的管理
- 基于SpringAOP的数据库读写分离实现
- 基于SpringAOP的操作日志记录实现
- Spring(四)(springaop的实现)
- SpringAOP过滤目标方法的简单实现
- SpringAOP模块初始化过程
- 反射实现AOP动态代理模式(SpringAOP的实现原理)
- springAOP 注解实现
- SpringAOP实现原理
- SpringAOP实现自定义注解
- springAOP实现原理
- SpringAOP实现读写分离
- 机器学习算法概览
- php函数getimagesize
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
- MySQL: MyISAM和InnoDB的区别
- C++递归求斐波那契数列
- SpringAOP的实现过程
- android布局属性大全
- MySQL死锁问题实例分析及解决方法(主要是SQL语句可能会产生的问题)
- Android JS 安全注入改进版
- AES密码算法
- Java 素数
- 排序算法代码总结
- centos6.7更换源
- mysql 解除正在死锁的状态