java基础_数据库JDBC_动态代理模式

动态代理(proxy)模式:  

jdbc使用的是装饰者模式,而c3p0使用的是动态代理模式生成的Connection对象。

1.动态代理概念:

在程序运行期间,动态生成指定一组接口的一个实现类对象!

这个类没有名字.但是却实现了指定的一组接口中的所有的抽象方法!!

2.动态代理方法的三大参数:

1.ClassLoader loader:指定生成的动态代理类是通过哪个类加载器到达内存中的

2.Class[ ] interfaces:指定代理对象所要实现的接口们

3.InvocationHandler h:指定代理对象的方法调用时是如何处理的

3.代码如下:

package com.proxydemo;
/*
 * 动态代理:
 * 在程序运行期间动态的生成给定接口们的实例对象!!!
 * 
 * 动态生成的代理对象的方法调用:实际上绝大多数方法都是走的InvocationHandler中的invoke方法:
 * 
 */

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface A{
    public abstract void a();
    public abstract String aa();
    public abstract String aaa(String str1,String str2);
    
}

interface B{
    public abstract void b();
}

public class ProxyDemo1 {

    public static void main(String[] args) throws Exception {
        
        //使用Proxy类的静态方法,可以获取一个指定了接口的实现类对象!!
        /*
         * 第一个参数:动态生成的类是通过哪个类加载器加载到内存中
         * 第二个参数:动态生成的类所实现的接口:Class[]
         * 第三个参数:动态生成的对象方法调用的处理器!
         */
        
        //1.借用本类的类加载器
        ClassLoader loader = ProxyDemo1.class.getClassLoader();//动态生成的属于系统类加载器。
        //2.要实现的接口数组
        Class[] interfaces = {A.class,B.class};
        //3.调用处理器,InvocationHandler是个接口
        InvocationHandler h = new InvocationHandler() {//匿名,InvocationHandler词义为调用处理器
            @Override
、    //只有1个抽象方法叫invoke
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("hello"); for (Object obj : args) { System.out.println(obj); } return "xxx"; } }; //动态生成一个实现了指定接口的对象
     //使用Proxy类的静态方法,打点调用,需要三个参数分别是1.类加载器,2.接口,3.调用处理器
Object proxy = Proxy.newProxyInstance(loader, interfaces, h);// A a = (A) proxy; // a.a();//空实现 // String res = a.aa(); // System.out.println(res); //带参数的方法调用 String res = a.aaa("abc","def"); System.out.println(res); //调用Object中继承的方法: // proxy.toString();走invoke方法 // proxy.hashCode();走invoke方法 // proxy.wait();走invoke方法 // B b = (B) proxy; // b.b(); } }

 拓展:类加载器classloader有三种,1.系统加载器 ; 2. 扩展加载器; 3.根类加载器 。

 

 

调用处理器详解:InvocationHandler

调用处理器是代理对象的方法被调用时,如何处理的业务逻辑的一个封装!

 

posted @ 2018-12-03 21:52  杜菲  阅读(1158)  评论(0编辑  收藏  举报