JDK动态代理简单实现

1.jdk动态代理目标类必须实现一个或多个接口 如果没有实现接口则无法实现jdk动态代理,如果想实现没有接口的类,就可以使用cglib 代理(子类代理)

2.实现jdk动态代理需要实现类的接口类型


public interface IUserDao {

public void a();

    public void b();

}


public class UserDaoimplements IUserDao{

@Override

    public void a() {

System.out.println("aaa");

    }

@Override

    public void b() {

System.out.println("bbb");

    }

}


/**

* 代理工厂

* 创建动态代理

* 动态代理不需要实现接口,但需要制定接口类型

*/

/**

* jdk 动态代理有一个限制,就是代理对象必须实现一个或多个接口 也叫 接口代理

* 如果想实现没有接口的类,就可以使用cglib 代理(子类代理)

*/

public class ProxyFactory {

private Objecttarget;

    public ProxyFactory(Object target){

this.target = target;

    }

/**

* 给目标对象生成代理对象

    * @return

    */

    public ObjectgetProxyInstance(){

return Proxy.newProxyInstance(

//类加载器

                target.getClass().getClassLoader(),

                //目标对象接口类型,使用泛型方式确认

                target.getClass().getInterfaces(),

                //触发事件处理器的方法,会把当前执行目标的对象的方法作为参数传入

                new InvocationHandler() {

@Override

                    public Objectinvoke(Object proxy, Method method, Object[] args)throws Throwable {

System.out.println("开始事务");

                        Object returnValue = method.invoke(target,args);

                        System.out.println("提交事务");

                        return returnValue;

                    }

}

);

    }

}




public class TestProxy {

public static void main(String[] args) {

UserDao target =new UserDao();

        //原始的类型

        System.out.println(target.getClass());

        ProxyFactory proxyFactory =new ProxyFactory(target);

        //必须指定接口类型,否则

//Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to com.hbj.Test.proxy.UserDao

// at com.hbj.Test.proxy.TestProxy.main(TestProxy.java:11)

        IUserDao proxyInstance = (IUserDao) proxyFactory.getProxyInstance();

        System.out.println(proxyFactory.getClass());

        proxyInstance.a();

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 夜莺2517阅读 128,179评论 1 9
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,860评论 28 54
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,775评论 2 9
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,377评论 4 8

友情链接更多精彩内容