1.【每日分享】动态代理实现一JDK原生动态代理

Java动态代理对象,今天和大家分享一下动态代理的一种实现方案,使用JDK原生方案。

什么是动态代理

我们比较熟悉数据库连接池,在对数据库进行操作是,我们首先获取数据库对象,我们获取的其实不是真正的对象,而是它的代理对象。

举个栗子,在使用一个jar的时候,我想重写jar包的部分方法,其他的还是按照它原来的逻辑处理,我们有没有它的源码,怎么办呢,这个时候就可以使用动态代理来实现。

怎么实现动态代理

1.需要跟真是对象实现相同的接口
2.对于需要重写的方法重写
3.对于不需要重写的直接调用真正的对象完成

java动态代理对象

动态代理.png

代码实现

接口类

package proxy;

public interface MyBusiness {
    
    public void method1();
    
    public void method2();
    
}

真正对象

package proxy;

public class MyBusinessImpl implements MyBusiness {

    @Override
    public void method1() {
        System.out.println("#########method1##########");

    }

    @Override
    public void method2() {
        System.out.println("#########method2##########");
    }

}

代理对象

package proxy;

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

public class ProxyMain {

   public static void main(String[] args) throws Exception{
       final MyBusiness obj = new MyBusinessImpl();
//      obj.method1();
//      obj.method2();
       
      MyBusiness pro = (MyBusiness)Proxy.newProxyInstance(ProxyMain.class.getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() {
           
           @Override
           public Object invoke(Object proxy, Method method, Object[] args)
                   throws Throwable {
               // TOD Auto-generated method stub
               if("method1".equals(method.getName())){
                   System.out.println("proxy successed");
                   return null;
               }else{
                   return method.invoke(obj, args);
               }
           }
       });
      pro.method1();
       
       
       
   }
}

这是使用jdk的简单实现,下篇给大家分享cglib实现动态代理

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

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,904评论 1 32
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 9,919评论 1 14
  • (星耀小学五年四班刘雪)寒假共读20分钟妈妈陪读20分钟。(第六次)
    一生有你_c0c7阅读 1,297评论 0 0

友情链接更多精彩内容