© 版权声明:本文为博主原创文章,转载请注明出处

什么是AOP

-面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术

-主要的功能是:日志记录、性能统计、安全控制、事务处理、异常处理等

AOP实现方式

-预编译

  -AspectJ

-运行期动态代理(JDK动态代理、CGLib动态代理)

  -Spring AOP、Jboss AOP

AOP相关概念

-切面(Aspect)           一个关注点的模块化,这个关注点可能会横切多个对象

-连接点(Joinpoint)         程序执行过程中的某个特定的点

-通知(Advice)           在切面的某个特定的连接点上执行的动作

-切入点(Pointcut)          匹配连接点的断言,在AOP中通知和一个切入点表达式关联

-引入(Introduction)         在不修改类代码的前提下,为类添加新的方法和属性

-目标对象(Target Object)     被一个或者多个切面所通知的对象

-AOP代理(AOP Proxy)        AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能) 

-织入(Weaving)           把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象,分为:编译时织入、类加载时织入、执行时织入

Advice的类型

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

-返回后通知(After returning advice)     在某连接点(join point)正常完成后执行的通知

-抛出异常后通知(After throwing advice)    在方法抛出异常退出时执行的通知

-后通知(After(finally) advice)       当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)

-环绕通知(Around Advice)                包围一个连接点(join point)的通知

Spring中AOP的用途

-提供了声明式的企业服务,特别是EJB的替代服务的声明

-允许用户定制自己的方面,以完成OOP和AOP的互补使用

Spring的AOP实现

-纯Java实现,无需特殊的编译过程,不需要控制类加载器层次

-目前只支持方法执行连接点(通知Spring Bean的方法执行)

-不是为了提供最完整的AOP实现;而是侧重于提供一种AOP实现和Spring IoC容器之间的整合,用于帮助解决企业应用中的常见问题

-Spring AOP不会和AspectJ竞争,从而提供综合完整的AOP解决方案

Spring AOP的代理方式

-默认使用标准的JavaSE动态代理作为AOP代理,使得任何接口(接口集)都可以被代理

-如果一个业务对象并没有实现一个接口,也可以使用CGLIB代理

参考:http://www.imooc.com/video/4418

最新文章

  1. centos7安装mariadb10遇到的问题解决
  2. #Cocos2d+lua#android+Eclipse工程编译设置
  3. struts2中方法拦截器(Interceptor)的中的excludeMethods与includeMethods的理解
  4. chrome性能测试框架webpagereplay
  5. 菜鸟做HTML5小游戏 - 刮刮乐
  6. WIN7下使用.net(C#)监视剪贴板 (转)
  7. iPhoneKeyboard
  8. VS2015试验随手记
  9. docker + mysql安装sonarqube
  10. 简单css实现input提示交互动画效果
  11. 2018.4.26 lvm
  12. 草珊瑚的redux使用方式
  13. 通过javascript修改class名字-学习笔记
  14. Java 注解 初探 (一)
  15. avalon实现日期联动
  16. 51Nod - 1154 回文串划分(最少回文串dp)
  17. JSONObject与JSONArray的使用(jackson)
  18. LuoguP2846[USACO08NOV]光开关Light Switching【线段树维护区间异或】By cellur925
  19. 《The Unreasonable Effectiveness of Recurrent Neural Networks》阅读笔记
  20. 三星抛出万亿投资计划 布局四大科技创新领域(5G、人工智能、汽车半导体、生物技术四大新兴产业)

热门文章

  1. webpack-dev-server 支持其他设备访问配置
  2. 【BZOJ1413】取石子游戏(博弈,区间DP)
  3. JS与验证控件结合验证
  4. 【Visual Studio】解决错误 fatal error C1010: unexpected end of file while looking for precompiled head(转)
  5. Lotus Notes Error: your mail file cannot be located. use file location manage location to ensure that your mail file is specified correctly
  6. cookie、session、localStorage、sessionStorage区别
  7. asp.net core 2.1 将控制器抽离到类库中
  8. HYSBZ 2818 Gcd【欧拉函数/莫比乌斯】
  9. Network | Cookie and Session
  10. 关于ProGuard的学习了解(从别处转来)