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

什么是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

Spring学习十三----------Spring AOP的基本概念的更多相关文章

  1. spring学习 十三 注解AOP

    spring 不会自动去寻找注解,必须告诉 spring 哪些包下的类中可能有注解,也就是要开启注解扫描,注解的包是spring-context.jar,所以在配置文件中还要引入context约束,也 ...

  2. Spring学习(十三)-----Spring 表达式语言(Spring EL)

    本篇讲述了Spring Expression Language —— 即Spring3中功能丰富强大的表达式语言,简称SpEL.SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂 ...

  3. Spring学习笔记之aop动态代理(3)

    Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...

  4. Spring学习(十一)-----Spring使用@Required注解依赖检查

    Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...

  5. Spring学习(六)-----Spring使用@Autowired注解自动装配

    Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...

  6. Spring学习笔记4——AOP

    AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 ...

  7. spring学习(三) ———— spring事务操作

    前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...

  8. spring 学习 一 spring 介绍

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. Spring ...

  9. spring学习12 -Spring 框架模块以及面试常见问题注解等

    以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...

随机推荐

  1. js setInterval 启用&停止

    以下面例子为说明: <title></title> <script src="Scripts/jquery-1.4.1-vsdoc.js" type= ...

  2. 【转】Java进阶之路

    1.   引言 搞Java的弟兄们肯定都想要达到更高的境界,用更少的代码解决更多的问题,用更清晰的结构为可能的传承和维护做准备.想想当初自己摸着石头过河,也看过不少人介绍的学习路线,十多年走过来多少还 ...

  3. BZOJ 3640: JC的小苹果

    3640: JC的小苹果 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 425  Solved: 155[Submit][Status][Discus ...

  4. [论文]A Link-Based Cluster Ensemble Approach for Categorical Data Clustering

    http://www.cnblogs.com/Azhu/p/4137131.html 这篇论文建议先看了上面这一遍,两篇作者是一样的,方法也一样,这一片论文与上面的不同点在于,使用的数据集是目录数据, ...

  5. svn没有"对号"等符号

    [问题描述]调整svn建立好了服务端.安装客户端也检出成功了.但是就是没有对号符号. [解决方案]右键菜单,设置,里面有“图标覆盖”这个选项,把你的文件夹加入进去,然后注销windows用户重新登陆

  6. Method, apparatus, and system for speculative abort control mechanisms

    An apparatus and method is described herein for providing robust speculative code section abort cont ...

  7. git的使用学习(七)githup和码云的使用

    1.使用GitHub 我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开 ...

  8. hdu 1788(多个数的最小公倍数)

    Chinese remainder theorem again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  9. 牛客网 牛客小白月赛1 J.おみやげをまらいました

    J.おみやげをまらいました   链接:https://www.nowcoder.com/acm/contest/85/J来源:牛客网     随便写写.   代码: 1 #include<ios ...

  10. delphi中将 4 个 Byte 合成 1 个 Integer 的五种方法

    有4个字节类型的值,用移位或逻辑运算符怎么合成一个整数?比如 $FFEEDDCC.高$FF$EE$DD$CC低 //方法 1: 共用内存procedure TForm1.Button1Click(Se ...