java中的动态代理都需要实现一个实现了InvocationHandler接口的代理类,在该类中需要实现invoke方法,并且需要注入你想要代理的目标类对象实例。然后就可以对想要代理的方法进行操作了。
动态代理类图:
具体demo示例:
对象接口
package invokeProxy;
public interface Person {
void work();
void play();
}
对象实例:
package invokeProxy;
public class Man implements Person{
private String name;
public Man(String name){
this.name = name;
}
public void work() {
System.out.println(name+" says Work is very hard");
}
public void play() {
System.out.println(name+" says Playing is very funny");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
动态代理:
package invokeProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicProxy implements InvocationHandler{
private Man man;
public DynamicProxy(Man man){
this.man = man;
}
//参数说明:proxy 代理实例, method,目标方法,args数组,方法中参数
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(method.getName().equals("work")){
System.out.println("the work method will be run.");
method.invoke(man, null);
System.out.println("the work method is finished.");
}
else
method.invoke(man, null);
return null;
}
}
动态代理测试:
package invokeProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class DynamicProxyTest {
public static void main(String[] args){
Man man = new Man("lxy");
InvocationHandler dynamicProxy = new DynamicProxy(man);
Class<?> clazz = man.getClass();
//三个参数都不能为空 也就是说被代理类必须有实现某一接口,而且有动态代理对象
Person person = (Person) Proxy.newProxyInstance(clazz.getClassLoader(),
clazz.getInterfaces(),dynamicProxy);
person.work();
person.play();
}
}
说明:代理模式是设计模式的重要模式之一,动态代理模式又是java最重要特性反射的示例demo,要重点掌握哈。迭代器模式,观察者模式,三大工厂模式,外观模式是设计模式务必掌握的几个模式。
- 大小: 12.8 KB
分享到:
相关推荐
这是设计模式的工厂模式的简单代码,是用的菜鸟教程网站零散例子,在本地实际跑代码。自己给自己做个复习
博客原地址:http://blog.csdn.net/lhy_ycu/article/details/40031567
本人自己收集的一些比较好的学习设计模式的教程!里面包含了很多种设计模式学习!通俗易懂......QQ:82204642
设计模式(菜鸟到高手)
设计模式(Design pattern)是一套被反复使用、...本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的软件工程师!
这是设计模式的工厂模式的改善代码版本,用了反射机制,是用的菜鸟教程网站零散例子,在本地实际跑代码。自己给自己做个复习
24种设计模式介绍与6大设计原则希望这本书的阅读者具备最基本的代码编写能力,您是一个初级的 coder,可以从中领会到怎么设计 一段优秀的代码;您是一个高级程序员,可以从中全面了解到设计模式以及 Java 的边角技术...
设计模式(Design pattern)是一套被反复使用、...本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的软件工程师!
主要介绍23中设计模式,其中都有基于Java的代码示例
深入浅出设计模式,深入浅出设计模式,深入浅出设计模式
主要为大家详细介绍了java设计模式之单例模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
详细介绍了java的23种设计模式,并且对设计模式进行了简明扼要的介绍,并且每种设计模式带着一个小例子
设计模式(Design pattern)是一套被反复使用、...本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的软件工程师!
简单例子说明了java的23种设计模式的原理,方便大家进行程序开发,对于入门级选手(我也是初学者)有很大的帮助
java常用的设计模式一个简单总结,如工厂模式、单例模式、代理模式等等。(楼主也是未入门的菜鸟,如有错误请及时联系楼主更正,谢谢!)
菜鸟学设计模式(28天)[收集].pdf
深入浅出设计模式(Head First Design Patterns)完整版,由本人精心整理网上的JPG版制作成PDF版供各位编程爱好者下载学习,这部模式教程诙谐幽默,寓教于乐,实乃菜鸟成才必备之选。共分为11个压缩包,绝对的物有所值...
C#23种设计模式【完整】(亲测可用) C#23种设计模式【完整】(亲测可用)
设计模式之旅图说设计模式小猪的设计模式初涉总结Java之美[从菜鸟到高手演变]之设计模式Java之美[从菜鸟到高手演变]之设计模式二Java之美[从菜鸟到高手演