Spring Aop机制总结
2013-09-10 20:47
218 查看
Spring AOP概述
AOP(Aspect Oriented Programming)面向切面编程.是一种比较新颖的设计思想.是对OOP(Object Orientd Programming)面向对象编程的一种有益的补充.
1、OOP和AOP
OOP对业务处理过程中的实体及其属性和行为进行了抽象封装,以获得更加清晰高效果的逻辑划分.研究的是一种“静态的”领域。AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段.研究的是一种“动态的”领域。
2、AOP的基本术语
1)切面Aspect
业务处理过程中的一个截面.就像权限检查.通过切面,可以将不同层面的问题隔离开:比如浏览帖子和权限检查两者互不相干。这样一来,也就降低了耦合性,我们可以把注意力集中到各自的领域中.
2)连接点JoinPoint
程序运行中的某个阶段点.如某个方法的调用,或者异常的抛出等.
3)处理逻辑Advice
在某个连接点采取的逻辑.这里的逻辑有三种:
Around 在连接点前后插入预处理和后处理过程.
Before 在连接点前插入预处理过程.
Throw 在连接点抛出异常的时候进行异常处理.
4)切点PointCut
一系列连接点的集合,它指明处理逻辑Advice将在何在被触发.
Spring AOP实现机制
1、Spring内置AOP机制
基于动态AOP机制的实现.所谓动态AOP,其实就是动态Proxy模式,在目标对象的方法前后插入相应的代码.Spring AOP中的动态Proxy模式,是基于Java Dynamic Proxy(面向Interface)和CGLib(面向Class)的实现。
这是动态代理生成的函数代码,Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); 函数要求获取目标对象的所有接口方法,若目标对象不是基于接口的,则这种方式无法生成代理对象,所以有了CGLib的方式。即没有实现任何接口的类,就必须使用CGLib来动态构造代理类。而且CGLib构造的代理类是目标类的一个子类(需要实现MethodInterceptor接口等)
2、扩展AOP机制
可以使用自定义类加载器和实现字节码转换器
(具体参考http://www.iteye.com/topic/1116696)
3、AOP的配置方式
1)使用ProxyFactoryBean的代理
2)使用注解的aop代理,<aop:aspectj-autoproxy/>
3)使用配置文件的方式 <aop:config>
(具体实现参考:http://xuxiaolei.iteye.com/blog/414162)
AOP(Aspect Oriented Programming)面向切面编程.是一种比较新颖的设计思想.是对OOP(Object Orientd Programming)面向对象编程的一种有益的补充.
1、OOP和AOP
OOP对业务处理过程中的实体及其属性和行为进行了抽象封装,以获得更加清晰高效果的逻辑划分.研究的是一种“静态的”领域。AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段.研究的是一种“动态的”领域。
2、AOP的基本术语
1)切面Aspect
业务处理过程中的一个截面.就像权限检查.通过切面,可以将不同层面的问题隔离开:比如浏览帖子和权限检查两者互不相干。这样一来,也就降低了耦合性,我们可以把注意力集中到各自的领域中.
2)连接点JoinPoint
程序运行中的某个阶段点.如某个方法的调用,或者异常的抛出等.
3)处理逻辑Advice
在某个连接点采取的逻辑.这里的逻辑有三种:
Around 在连接点前后插入预处理和后处理过程.
Before 在连接点前插入预处理过程.
Throw 在连接点抛出异常的时候进行异常处理.
4)切点PointCut
一系列连接点的集合,它指明处理逻辑Advice将在何在被触发.
Spring AOP实现机制
1、Spring内置AOP机制
基于动态AOP机制的实现.所谓动态AOP,其实就是动态Proxy模式,在目标对象的方法前后插入相应的代码.Spring AOP中的动态Proxy模式,是基于Java Dynamic Proxy(面向Interface)和CGLib(面向Class)的实现。
这是动态代理生成的函数代码,Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); 函数要求获取目标对象的所有接口方法,若目标对象不是基于接口的,则这种方式无法生成代理对象,所以有了CGLib的方式。即没有实现任何接口的类,就必须使用CGLib来动态构造代理类。而且CGLib构造的代理类是目标类的一个子类(需要实现MethodInterceptor接口等)
2、扩展AOP机制
可以使用自定义类加载器和实现字节码转换器
(具体参考http://www.iteye.com/topic/1116696)
3、AOP的配置方式
1)使用ProxyFactoryBean的代理
2)使用注解的aop代理,<aop:aspectj-autoproxy/>
3)使用配置文件的方式 <aop:config>
(具体实现参考:http://xuxiaolei.iteye.com/blog/414162)
相关文章推荐
- spring aop自动代理注解配置失效问题及原理机制整理总结
- Spring的AOP机制---- 各类通知总结---- 各类通知总结
- Spring Aop机制总结
- SpringAOP之学习总结
- SpringAOP的应用实例与总结
- Spring学习总结(三)——Spring实现AOP的多种方式
- Spring的AOP机制---- AOP的注解配置---- AOP的注解配置
- Spring学习总结——Spring实现AOP的多种方式
- [Spring]Spring AOP学习笔记(3)---Spring JDBC总结
- Spring学习总结——Spring实现AOP的多种方式
- 【第六章】 AOP 之 6.9 代理机制 ——跟我学spring3
- Spring-AOP 混合使用各种切面类型及不同切面总结
- 170323、Spring 事物机制总结
- spring源码分析,重新认识spring三(总结,总结下 ioc 和 aop,同时提出疑惑)
- Spring AOP基础(Spring 3.x企业应用开发实战第六章)学习总结
- spring的AOP简介与事务传播特性总结(转载)
- spring->aop中proxy-target-class属性的含义以及动态代理机制
- Spring的AOP机制---- AOP异常通知制---- AOP异常通知
- spring--aop总结
- Spring AOP 实现机制杂谈