文档章节

JDK动态代理

丶KKdo
 丶KKdo
发布于 2016/07/31 14:21
字数 206
阅读 2
收藏 0

首先,编写一个接口IAgency类.

public interface IAgency {
    public void agency();
}

然后实现这个接口:

public class Agency implements IAgency{
    
    public void agency() {
        System.out.println("被代理类的方法: agency()");
    }
}    

要实现JDK的动态代理,主要是依靠InvocationHandler接口和Proxy类,编写代理类:

public class AgencyHandler implements InvocationHandler {

    private Agency agency;
    public AgencyHandler(Agency agency) {
        this.agency = agency;
    }

    private void beforeMethod(Method method) {
        System.out.println("执行Agency类的" + method.getName() + "方法之前");
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        beforeMethod(method);
        method.invoke(agency, args);
        return null;
    }
}

进行测试:

public class TestProxy {
    
    public static void main(String[] args) {
        Agency agency = new Agency();
        AgencyHandler agencyHandler = new AgencyHandler(agency);
        IAgency agencyProxy =

                (IAgency) Proxy.newProxyInstance(agency.getClass().getClassLoader(), 
                        agency.getClass().getInterfaces()
                            , agencyHandler);
        agencyProxy.agency();    //调用接口的方法
    }
}

输出:

执行Agency类的agency方法之前
被代理类的方法: agency()

 

可以看到成功的将beforeMethod()方法加入到了代理类方法执行之前.
 

 

 

© 著作权归作者所有

共有 人打赏支持
上一篇: SSH的配置
下一篇: jbdc编程示例
丶KKdo
粉丝 1
博文 24
码字总数 13683
作品 0
成都
程序员
私信 提问

暂无文章

OSChina 周一乱弹 —— 加油,还有11个小时就下班了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @_全村的希望 :吴亦凡把大碗面正儿八经做成单曲了,你别说,还挺好听 《大碗宽面》- 吴亦凡 手机党少年们想听歌,请使劲儿戳(这里) @tom_t...

小小编辑
28分钟前
74
7
C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
6
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
5
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
4
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部