Spring AOP的深入理解

1.动态代理的实现原理

    在Spring中,如果想要了解AOP,就必须了解动态代理的原理,因为AOP就是基于动态代理实现的。而动态代理要从JDK说起。

在Jdk的java.lang.reflect包下有个Proxy类,它正是构造代理类的入口。在这个类中,有一个方法newProxyInstance就是创建代理对象的方法。这个方法需要三个参数,ClassLoader,用于加载代理类的Loader类,通常这个Loader和被代理的类是同一个Loader类。Interfaces,是要被代理的那些接口。InvocationHandler,就是用于执行除了被代理接口中方法之外的用户自定义的操作,他也是用户需要代理的最终目的。用户调用目标方法都被代理到InvocationHandler类中定义的唯一方法invoke中。

以上图来自其他博客,这里附上原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/

   这是一个生成代理类的过程,比较清晰。。。

总结就是:代理的目的是调用目标方法时,我们可以转而执行InvocationHandler类的invoke方法,所以,如何实现在InvocationHandler上做文章就是Spring实现AOP的关键所在。

在Spring中,它又扩展了一些接口(Joinpoint,Poincut,Advice,Introduction,Target,Weaving,Proxy,Aspect),使这个AOP过程更加灵活。

Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在Spring中,这些点指的是方法,因为spring只支持方法类型的连接点。

Pointcut(切入点):就是指我们要对哪些Joinpoint进行拦截的定义。就是我们要对哪些方法进行增强。

Advice(通知/增强):指拦截到Joinpoint之后所要做的事情就是通知。

Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或 Field。

Target(目标对象):代理的目标对象

Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程

Proxy(代理):一个类被AOP织入增强后,就产生了一个结果代理类

Aspect(切面):是切入点通知(引介)的结合

2.spring中的设计模式分析

  在spring中使用了很多设计模式:工厂模式、单例模式、代理模式等。

  代理模式原理:

       代理模式就是给某一个对象创建一个代理对象,而由这个代理对象控制对原对象的引用,而创建这个代理对象就是可以在调用原对象时增加一些额外的操作。

  在代理模式结构中,

  • Subject:抽象主题,它是代理对象的真实对象要实现的接口,当然这可以由多个接口组成。
  • ProxySubject:代理类除了实现抽象主题定义的接口外,还必须持有所代理对象的引用
  • RealSubject:被代理的类,是目标对象。

 工厂模式:

       通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。

       一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。

单例模式:

保证一个类仅有一个实例,并提供一个访问它的全局访问点。 
       spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为spring管理的是是任意的java对象。 
核心提示点:Spring下默认的bean均为singleton,可以通过singleton=“true|false” 或者 scope=“?”来指定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值