博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态代理类及自动实现方法
阅读量:6882 次
发布时间:2019-06-27

本文共 1830 字,大约阅读时间需要 6 分钟。

package com.fanShe;import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** 动态代理类及自动实现方法 * @param args */interface Dog{    void info();    void run();}class GunDog implements Dog{    public void info(){        System.out.println("我是一只猎狗");    }    public void run() {        System.out.println("我奔跑迅速");            }}class DogUtil{    public void method1(){        System.out.println("=====模拟第一个方法");    }        public void method2(){        System.out.println("===模拟第二个方法");            }}//MyProxyFactory自动执行的方法invoke()  class MyInvokationHandler implements InvocationHandler{    private Object target;        public void setTarget(Object target){        this.target=target;    }        public Object invoke(Object proxy,Method method,Object[] args){        DogUtil du=new DogUtil();        du.method1();        Object result=null;        try {            //实现了 接口的子类中的所有方法             result = method.invoke(target, args);            du.method2();        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }         //这里的return 可以是null        return result;    }}//一个有把接口转变成 一个类的实例的 工厂public class MyProxyFactory {    public static Object getProxy(Object target){        MyInvokationHandler handler=new MyInvokationHandler();        handler.setTarget(target);        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);    }    public static void main(String[] args) {        // TODO Auto-generated method stub        Dog target=new GunDog();        Dog dog=(Dog)MyProxyFactory.getProxy(target);        dog.info();        dog.run();    }}

 

转载于:https://www.cnblogs.com/shaoshao/archive/2013/06/02/3113801.html

你可能感兴趣的文章
STS导项目的顺序及注意事项
查看>>
CentOS 7 安装 Git 与 Gitlab-runner 实例
查看>>
nginx配置用户认证
查看>>
一文带你认识Spring事务
查看>>
玩转大数据系列之三:数据报表与展示
查看>>
阿里云BaaS:降低区块链应用门槛,用技术构建商业互信
查看>>
《富爸爸巴比伦最富有的人》读书笔记3000字
查看>>
分享几个国外学习网站
查看>>
一文分析java基础面试题中易出错考点
查看>>
6月21日云栖精选夜读丨CCTV5手机客户端新媒体:让赛事集锦堪比电影大片
查看>>
$ is not defined错误分析及解决
查看>>
Qt之子类发送消息给父类
查看>>
redis哨兵模式
查看>>
深入源码分析-线程池的实现原理
查看>>
开箱即用(out-of-box)的Redis序列号生成器,不用再写任何代码,你值得拥有
查看>>
Java大牛呕心沥血经历——技术面试与HR谈薪资技巧
查看>>
Pycharm上Django的使用 Day12
查看>>
遇见一只黑猫,她说Python是个怪物
查看>>
spring 中Page< >遇到得小问题
查看>>
IT兄弟连 JavaWeb教程 JavaBean组件定义
查看>>