zoukankan      html  css  js  c++  java
  • Spring的AOP

    AOP指面向切面的编程:所谓切面,就是指日志、权限、异常处理、事物管理、安全检查、缓存、对象池管理等具有横切性质的系统性服务面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程

    AOP中的三个关键概念:

    切入点(Pointcut):Pointcut 是 Join Point 的集合, Join Point 就是需要注入 Adivce 的位置,也就是需要插入日志输出代码、事务处理代码等“方面”( Aspect ,也就是 AOP 中的 A )代码的地方。

    通知( Advice ): 就是指 Join Point 对应的代码(方法)。比如日志输出这个方面,指的就是日志输出的代码或方法了。在 Spring 中,它对应类(class )。

    Advisor : 是 Poincut 和 Advice 的配置器,它包括 Pointcut 和 Advice ,是将 Advice 注入程序中 Pointcut 位置的代码。

    原理图:

    如图:AOP 实际上是由目标类的代理类实现的AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但 AOP 代理中的方法与目标对象的方法存在差异,AOP 方法在特定切入点添加了增强处理,并回调了目标对象的方法

    Spring 中对 AOP 的支持

    Spring 中 AOP 代理由 Spring 的 IoC 容器负责生成、管理,其依赖关系也由 IoC 容器负责管理。因此,AOP 代理可以直接使用容器中的其他 Bean 实例作为目标,这种关系可由 IoC 容器的依赖注入提供。Spring 默认使用 Java 动态代理来创建 AOP 代理, 这样就可以为任何接口实例创建代理了。当需要代理的类不是代理接口的时候, Spring 自动会切换为使用 CGLIB 代理,也可强制使用 CGLIB。 

    AOP 编程其实是很简单的事情。纵观 AOP 编程, 其中需要程序员参与的只有三个部分:

    • 定义普通业务组件。
    • 定义切入点,一个切入点可能横切多个业务组件。
    • 定义增强处理,增强处理就是在 AOP 框架为普通业务组件织入的处理动作。

    所以进行 AOP 编程的关键就是定义切入点和定义增强处理。一旦定义了合适的切入点和增强处理,AOP 框架将会自动生成 AOP 代理,即:代理对象的方法 = 增强处理 + 被代理对象的方法

    Spring 中 AOP 的实现及编程实例:

    http://blog.csdn.net/a906998248/article/details/7514969

    在调用切面的指定时,可以指定某个类的所有方法都调用方面,也可以指定某个类中的某个方法。此时由于用到正则表达式,于是需要引入jakarta-oro-2.0.8.jar 包。

    可以在方法前后,前,后,发生异常时调用切面的代码。

    创建AOP代理的两种方法:

    1 、用ProxyFactoryBean创建AOP代理

    2 、用DefaultAdvisorAutoProxyCreator创建自动代理---现在更多的使用BeanNameAutoProxyCreator

    两种方法具体属性解读:

    http://www.cnblogs.com/65702708/archive/2012/08/14/2638043.html

    Spring两种代理方式

    Java动态代理(对接口的代理)

    CGLIB代理:在没有接口的情况下Srping通过设置proxyTargetClass等于 true来使用CGLIB代理,CGLIB是一种面向继承的代理方式。同时还有一个proxyTarget属性用来指定代理的目标对象类。

    Advice类的书写:

    http://zlk.iteye.com/blog/694423

    参考文献:

    http://www.blogjava.net/sslaowan/archive/2007/01/31/97016.html

  • 相关阅读:
    NoSQL学习1
    inno setup 软件打包
    cmapx 保存绘制好的图层
    qt之菜单栏的创建
    qt 软件打包
    可恶的 0xc0000005异常
    成长
    msChart组件安装与编程
    qt 工具下的dump工具导出文档出现异常解决方案
    qt 环境下mapx组件的鼠标跟踪
  • 原文地址:https://www.cnblogs.com/dobestself-994395/p/4272686.html
Copyright © 2011-2022 走看看