springAOP思想
2015-11-02 10:47
363 查看
1. 什么是AOP
AOP Aspect Oriented Programing 面向切面编程
1) 一种程序设计思想
2) AOP是OOP (Object Oriented Programing )延伸
思想:AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)
所以:AOP底层就是代理的增强 !
2. 在项目哪些功能使用AOP ?
1)、性能监视 (方法运行时间)
2)、事务管理
3)、安全检查 (权限 )
4)、缓存优化 (第一次访问,查询数据,放入缓存, 第二次以后访问 从缓存返回 )
5)、记录日志
3. AOP 分为两个部分
1)、 传统Spring AOP编程 (Spring1.2年代 )
Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码
2)、 AspectJ 框架的AOP编程 (Spring2.0以后年代 )
AspecJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持
4. AOP开发术语
Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.
Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
Target(目标对象):代理的目标对象
Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.spring采用动态代理织入,而AspectJ采用编译期织入和类装在期织入
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
Aspect(切面): 是切入点和通知(引介)的结合
图解:
5. AOP底层实现
1) JDK动态代理
2)Cglib动态代理机制
JDK只能对接口进行代理,如果目标对象没有接口,无法使用JDK动态代理 ---- 使用cglib
什么是cglib ?
CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
Cglib可以对接口或者类进行代理 !
小结:
Spring AOP 就是基于JDKProxy 和 CglibProxy
1、如果目标对象有接口,优先使用JDK Proxy
2、如果目标对象没有接口, 使用CglibProxy
AOP Aspect Oriented Programing 面向切面编程
1) 一种程序设计思想
2) AOP是OOP (Object Oriented Programing )延伸
思想:AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)
所以:AOP底层就是代理的增强 !
2. 在项目哪些功能使用AOP ?
1)、性能监视 (方法运行时间)
2)、事务管理
3)、安全检查 (权限 )
4)、缓存优化 (第一次访问,查询数据,放入缓存, 第二次以后访问 从缓存返回 )
5)、记录日志
3. AOP 分为两个部分
1)、 传统Spring AOP编程 (Spring1.2年代 )
Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码
2)、 AspectJ 框架的AOP编程 (Spring2.0以后年代 )
AspecJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持
4. AOP开发术语
Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.
Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
Target(目标对象):代理的目标对象
Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.spring采用动态代理织入,而AspectJ采用编译期织入和类装在期织入
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
Aspect(切面): 是切入点和通知(引介)的结合
图解:
5. AOP底层实现
1) JDK动态代理
2)Cglib动态代理机制
JDK只能对接口进行代理,如果目标对象没有接口,无法使用JDK动态代理 ---- 使用cglib
什么是cglib ?
CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
Cglib可以对接口或者类进行代理 !
小结:
Spring AOP 就是基于JDKProxy 和 CglibProxy
1、如果目标对象有接口,优先使用JDK Proxy
2、如果目标对象没有接口, 使用CglibProxy
相关文章推荐
- java io重定向
- java开发 笔记
- java synchronized详解
- Project facet Java version 1.7 is not supported.
- 你真的理解Java的按引用传递吗?
- 你真的理解Java的按引用传递吗?
- SpringMVC记住密码功能
- spring mvc +cookie+拦截器功能 实现系统自动登陆
- Java 内存分配
- java程序的内存分配
- Java面向对象之类和对象
- java Process的waitFor()
- eclipse创建android项目,无法正常预览布局文件,出现This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in...
- Myeclipse中maven工程使用jetty插件启动jetty服务器调试
- spring 官方文档,学习笔记
- 根据json数据书写javabean
- java replace和replaceAll区别
- Spring体系结构介绍
- 在eclipse中执行数据库脚本
- struts2中s:select标签的使用