在动态代理中动态代理类不再服务于特定的对象与接口,而是服务于他绑定的对象,绑定是动态的。而实际工作的类也不插入任何和业务无关的动作。要调用是,绑定他即可。
接口类:IBuySome.java
package org.kangsg219.DynamicProxy;
public interface IBuySome {
public void buy();
public void buy(String something);
}
被代理对象:BuySomeImpl.java
package org.kangsg219.DynamicProxy;
public class BuySomeImpl implements IBuySome {
public void buy() {
System.out.println("买个手机。(BuySomeImpl类中的buy方法。)");
}
public void buy(String something) {
System.out.println("买个"+something+"。(BuySomeImpl类中的buy方法。)");
}
}
代理对象:BuySomeProxy.java
package org.kangsg219.DynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class BuySomeProxy implements InvocationHandler{
private Object obj;
public Object bind(Object obj){
this.obj=obj;
/**
* java.lang.reflect.Proxy中的方法
* arg0 - 定义代理类的类加载器
* arg1 - 代理类要实现的接口列表
* arg2 - 指派方法调用的调用处理程序
*/
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
/**
* 实现InvocationHandler接口中的方法。
* arg0:被绑定对象。
* arg1:被绑定对象的方法(如TestMain中的buy方法)。
* arg2:被绑定对象的方法的参数组,是个可变参数(如buy中的String类型的"手机");
* 如果没有参数则arg2为null。
*/
public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
this.beforBuy();
return arg1.invoke(obj, arg2);//java.lang.reflect.Method类中的方法
}
public void beforBuy(){
System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
}
public void afterBuy(){
System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
}
}
测试类:TestMain.java
package org.kangsg219.DynamicProxy;
/**
* @author kangsg219
*
* 测试类
*/
public class TestMain {
public static void main(String[] args) {
BuySomeProxy bsp=new BuySomeProxy();
IBuySome ibs=(IBuySome)bsp.bind(new BuySomeImpl());
ibs.buy("手机");//调用BuySomeProxy中的invoke方法。
}
}
运行结果:
在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)
买个手机。(BuySomeImpl类中的buy方法。)
分享到:
相关推荐
代理设计模式、命令模式学习笔记,其中包含对模式的理解以及详细的模式使用示例
16-Java代理模式的学习笔记1
代理模式学习笔记、单例模式学习笔记、命令模式、原型模式、模式特点总结。 为个人对设计模式的理解,如果有理解不一致的不要砸砖啊
《C++20设计模式》学习笔记-第12章代理模式-配套代码
工厂模式,策略模式,装饰模式,代理模式,工厂方法模式,原型模式等23个设计模式
结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、...
JavaScript常见的一些设计模式学习笔记和代码实现。包括工厂模式、单例模式、代理模式、发布订阅模式、中介者模式等等内容。
Java多线程 基础学习笔记 / 学习静态代理模式-附件资源
NULL 博文链接:https://coolszy.iteye.com/blog/523111
NULL 博文链接:https://coolszy.iteye.com/blog/523105
2. 结构型模式:结构型模式关注对象之间的组合关系,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。这些模式可以帮助我们更好地组织和管理对象之间的关系,提高代码的灵活性和可...
SpringAOP学习笔记以及四个可运行的Demo,涵盖经典代理模式、基于注解、基于xml配置这3方面的Demo
该文档是自己在学习设计模式时整理的常用设计模式pdf文档,包括源码,包括装饰模式,代理模式,责任链模式,命令模式,解释器模式,迭代器模式,备忘录模式,观察者模式,工厂模式,建造者模式,适配器模式,桥梁...
针对几种经典软件设计模式:模板方法模式 外观模式 代理模式 装饰器模式 桥模式 工厂方法模式 组合模式等给出了简单易懂的讲解,透彻明了。很好的学习资料哦,是我平时学习时做的笔记外加自己的理解,很不错的……
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
JAVA,设计模式动态代理,学习笔记。
学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...
代理模式 外观模式 组合模式 装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 观察者模式 备忘录模式 迭代器模式 访问者模式 中介者模式 第二部分:JAVA 第三部分:Spring框架 第四部分:中间件 第五...