Spring的AOP细节理解

什么是AOP?
AOP:是面向切面编程,是对面向对象编程(oop)的一种补充,
为什么需要AOP?
例如在我们做一个计算器,要求我们每次运行对应的功能(也就是进行运算时)都要输出日志,以便于知道程序是怎么运行的
如果在OOP中,那么肯定需要抽象出一个log(日志)类吧,然后再每个方法前调用这个new一个log(日志)类,然后调用的方法,并传入不同的参数,
第一个问题,就是代码混乱吖,就是不是核心处理的代码也出现在核心的类里面,以后维护的时候,我还要去区分这个代码是什么来的,
第二个问题:就是代码太分散,就是当以后维护的时候需求发生变化的时候,比如我输出日志的格式发生改变,以前日志是输出XXXXXXXX,我现在要求日志输出时AAAAAAAAA,
那这样我是不是要每个类的去修改?比如我又几千几万行代码,那这样耗费的时间是不是好多

如何使用AOP:(AOP的本质就是Java的一个动态代理,只是AspectJ把这个东西封装好,在Spring中可以更加的好利用)
  使用AOP步骤:1创建切面,2定义通知,3实现通知
具体步骤可以参考这个http://www.cnblogs.com/jeremy-blog/p/4023743.html
AOP的术语

切面(Aspect): 有多个横切关注点组成,切面就是横切关注点被模块化后的特殊对象(原本横切关注点是分布在各个类里的,但是通过AOP被模块化到一个特殊的对象里,而这个特殊的对象就是切面,),
横切关注点: 跨越应用程序多个模块的功能(也可以说是需求,也可以说是方法)
通知(Advice): 切面必须要完成的工作(就是切面的功能(也就是切面的横切关注点,也可以说是切面里的方法))
目标(Target): 被通知的对象()
代理(Proxy): 向目标对象应用通知之后(调用切面的方法后)创建的对象(就是代理对象)
连接点(Joinpoint)(物理存在):程序执行的某个特定位置:如类某个方法调用前、调用后、方法抛出异常后等。连接点由两个信息确定:方法-》表示的程序执行点;相对点-》表示的方位(执行点的前后)。例如 执行的ArithmethicCalculator#add() 方法时,执行点为 ArithmethicCalculator#add(); 方位为该方法执行前的位置
切点(pointcut):每个类都拥有多个连接点:例如 ArithmethicCalculator 的所有方法实际上都是连接点,即连接点是程序类中客观存在的事务。AOP 通过切点定位到特定的连接点。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过 org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件。

时间: 2024-12-21 20:14:56

Spring的AOP细节理解的相关文章

spring的AOP个人理解和使用

1什么是AOP:AOP是面向切面编程,也就是说面向某个功能模块编程,典型的应用就是Spring的声明式事务, Spring的AOP事务解析: 在以前的事务管理是要融合在逻辑代码中的,在逻辑代码中决定事务是否提交或者回滚,这样很容易造成代码难以维护,代码冗余 但是使用spring的声明式事务后,只需要在数据库处理方法上注解事务,就可以对操作进行管理,事务的设置和逻辑代码分开,容易维护2AOP有什么作用 :面向切面编程,例如某个功能点,我们只需抽取横切关注点,然后让需要处理这些功能点的方法来使用代理

Spring容器AOP的理解

一句话理解:根据被代理对象信息通过Proxy动态生成我们具体的代理类. 实现就动态代理.那动态代理是什么呢? 动态代理其实并不是什么新鲜的东西,学过设计模式的人都应该知道代理模式,代理模式就是一种静态代理.而动态代理就是利用反射和动态编译将代理模式变成动态的.原理跟动态注入一样,代理模式在编译的时候就已经确定代理类将要代理谁,而动态代理在运行的时候才知道自己要代理谁. 别说不知道静态代理?规则:一般静态代理类需要和被代理类实现同样的接口.就说这么多吧,还是进入今天的核心吧. JDK动态代理实现思

Spring中AOP的理解

1.AOP的概念 AOP(AspectOriented Programming,面向切面编程)指的是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下个程序动态统一添加功能的一种技术.AOP提供从一个角度来考虑程序结构以完善面向对象编程.它为开发人员提供了一种描述横切关注点的机制,并能够自动将横向关注点入到面向对象的软件系统中,从而实现了横切关注点模块化 AOP一般用于实现那些与业务无关,但是业务模块所共同调用的逻辑,例如异常拦截.事务管理.日志管理和权限控制等,AOP将这些代码封装起

Spring AOP深入理解之拦截器调用

Spring AOP深入理解之拦截器调用 Spring AOP代理对象生成回想 上一篇博客中:深入理解Spring AOP之二代理对象生成介绍了Spring代理对象是怎样生成的,当中重点介绍了JDK动态代理方式,简单回想下代理对象生成过程: 1.上面讲到了两种生成代理对象的方法,一种是通过ProxyFactory,一种是通过ProxyFactoryBean. 第一种获取比較简单,可是须要手工的进行写代码.而另外一种是通过Spring的IOC机制来控制Bean的生成. 2.不管是ProxyFact

Spring框架学习(9)AOP技术理解与使用

内容源自:AOP技术理解与使用 一.什么是AOP? aop技术是面向切面编程思想,作为OOP(面向对象编程)的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想. AOP底层也是面向对象:只不过面向的不是普通的Object对象,而是特殊的AOP对象.AOP的关注点是组成系统的非核心通用服务模块(比如登录检查等),相对于普通对象,aop不需要通过继承.方法调用的方式来提供功能,只需要在xml文件中以引用的方式,将非核心服务功能引用给需要改功能的核心业务逻辑对象或方法中.最终实

Spring框架AOP的使用及个人对底层原理的理解

Spring框架AOP的使用及个人对底层原理的理解**** 前言: AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础.它是一种面向切面编程的思想.关于AOP的基础知识,相信多数童鞋都已经了如指掌,今天要给大家分享的是Spring框架AOP的使用,以及我个人对底层原理的一些理解. Aop使用步骤 配置aop信息 <aop:config> 相当于aop的根节点 配置切入点 <aop:piontcut> 切入点 可以理解为需要增强的方法

Spring学习(十三)aop技术理解与使用

一.什么是AOP? aop技术是面向切面编程思想,作为OOP的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想.AOP底层也是面向对象:只不过面向的不是普通的Object对象,而是特殊的AOP对象.AOP的关注点是组成系统的非核心通用服务模块(比如登录检查等),相对于普通对象,aop不需要通过继承.方法调用的方式来提供功能,只需要在xml文件中以引用的方式,将非核心服务功能引用给需要改功能的核心业务逻辑对象或方法中.最终实现对象的解耦.spring 中ioc技术实现了核心

8 -- 深入使用Spring -- 4... Spring的AOP

8.4 Spring的AOP AOP(Aspect Orient Programming),也就是面向切面编程,最为面向对象编程的一种补充. AOP和OOP互为补充,面向对象编程将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面.可以这样理解:面向对象编程是从静态角度考虑程序结构,而面向切面编程则是从动态角度考虑程序运行过程. 8.4.1 为什么需要AOP 8.4.2 使用AspectJ实现AOP 1.下载和安装AspectJ 2.AspectJ使用入门 8.4.3 AOP的

Spring(三)——AOP

AOP全名为Aspect-Oriented Programming,意思是面向横切面编程,前边我们有过介绍   面向横切面编程AOP的理解 ,我们通过这种编程思想很容易的扩展我们的应用程序. 一,如何实现AOP编程思想呢?实现这种编程思想的一个重要手段就是代理模式或者说模仿代理模式的运用.尤其是其中动态代理模式,JDK提供的Proxy的使用,这个在前边也总结:Proxy代理模式的应用                       而这种动态代理是基于接口的,也就是说代理对象和目标对象实现了同一个接