spring中的设计模式(二)

简介: 2.动态代理 JDK的动态代理首先看InvocationHandler接口 public interface InvocationHandler     extends Callback {       public abstract Objectinvoke(Objec...

2.动态代理

JDK的动态代理首先看InvocationHandler接口

public interface InvocationHandler

    extends Callback

{

 

    public abstract Objectinvoke(Object obj, Methodmethod, Object aobj[])

        throws Throwable;

}

这个接口只有一个invoke方法

第一个参数是代理的真实的对象

第二个参数是调用真实对象的方法

第三个是调用方法需要的参数

再看下Proxy类,用的最多的是里面的newProxyInstance方法

public class Proxy

    implements Serializable

{

   public static Object newProxyInstance(ClassLoader loader, Class     interfaces[], InvocationHandler h)

    {

        Class clazz = getProxyClass(loader,interfaces);

        return clazz.getConstructor(new Class[] {

           org.springframework.cglib.proxy.InvocationHandler.class

        }).newInstance(new Object[] {

            h

        });

        RuntimeException e;

        e;

        throw e;

        e;

        throw newCodeGenerationException(e);

    }

}

这个方法的第一个参数是一个ClassLoader对象,定义了由哪个ClassLoader对象来生成代理对象进行加载

第二个参数是一个interfaces的数组,表示我将要给我代理的对象提供什么接口,这样生成代理的对象的时候就可以调用这些接口里面的方法

第三个参数是一个InvocationHandler对象,表示这个动态代理对象调用方法的时候会关联到哪个invocationHandler对象

 

在整个动态代理模式中,每一个代理类都要实现InvocationHandler接口,每一个代理类对象都是一个InvocationHandler对象

这个代理类提供了一个构造方法,参数是Object 类,代表这个代理类对象生成时真正代理的对象

在代理类里面会执行Method对象的invoke方法执行真实对象的方法

 

而在客户端我们会先通过这个代理类得到InvocationHandler对象

然后通过Proxy类的newProxyInstance方法去得到这个真实的对象,然后调用

整个的流程应该是

 

说到动态代理,就不得不提到spring的Aop的实现

Aop的动态代理实现需要四个角色,被代理的类,被代理的接口,织入器,和切面

Proxy.newProxyInstance就是织入器,InvocationHandler是切面,首先织入器利用接口反射机制生成代理类,然后在这个代理类中织入方法,织入的是切面的方法,spring中默认的是动态代理机制试下Aop,因为动态代理机制下代理类必须要实现接口,如果代理类没有实现接口,则采用CGlib机制实现Aop,CGlib机制后续再进行补充

相关文章
|
21天前
|
设计模式 Java 数据库连接
9种设计模式在Spring中的运用
9种设计模式在Spring中的运用
58 0
|
设计模式 Java 数据库连接
Spring设计模式(一)
Spring设计模式(一)
|
6月前
|
设计模式 缓存 Java
Spring 框架中都用到了哪些设计模式
Spring框架采用了多种设计模式来实现自己的功能,这主要是为了解决一些常见的软件开发问题。以下是一些Spring框架中使用设计模式的原因:
30 0
|
3月前
|
设计模式 Java Spring
Spring5深入浅出篇:Spring工厂设计模式拓展应用
Spring5深入浅出篇:Spring工厂设计模式拓展应用
|
3月前
|
设计模式 Java Spring
Spring5深入浅出篇:Spring与工厂设计模式简介
Spring5深入浅出篇:Spring与工厂设计模式简介
|
9月前
|
设计模式 Java Spring
Spring 框架中都用到了哪些设计模式?
Spring 框架中都用到了哪些设计模式?
54 0
|
4月前
|
Java 应用服务中间件 数据库连接
太厉害!Redis+Nginx+设计模式+Spring全家桶+Dubbo技术精选合集
最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学就好了。不多bb了,直接上干货!
|
6月前
|
设计模式 Java Spring
Spring框架中使用了那些设计模式
Spring框架中使用了那些设计模式
25 0
|
6月前
|
设计模式 前端开发 Java
JAVA设计模式第七讲:设计模式在 Spring 源码中的应用
JAVA设计模式第七讲:设计模式在 Spring 源码中的应用
|
7月前
|
设计模式 前端开发 Java
Java经典面试题:Spring中用到了哪些设计模式?
一位应届毕业生被问到这样一道面试题,说Spring用到了哪些设计模式?其实只要Spring使用得够熟练,回答这道题还是非常轻松的。因为Spring的命名非常规范,基本上从类名就可以看得出来用到了哪些设计模式。 今天,我给大家分享一下我的理解。
64 1

热门文章

最新文章