您的位置:首页 > 编程语言 > Java开发

十、java编程思想中的动态代理实现

2017-03-10 10:45 375 查看
一、java编程思想反射章节的动态代理实现代码展示

package com.lattice.dtagency;

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

interface Person{
void doSomeThing();
void doSomeThingElse(String arg);
}

class Peter implements Person{
@Override
public void doSomeThing() {
System.out.println("Peter likes fishing!");
}

@Override
public void doSomeThingElse(String arg) {
System.out.println("Peter else likes swimming!"+arg);
}
}

class Merry implements Person{

@Override
public void doSomeThing() {
System.out.println("Merry likes dancing!");
}
@Override
public void doSomeThingElse(String arg) {
System.out.println("Merry else likes watching movies!"+arg);

}
}
/**
* 静态代理类
**/
class Lucy implements Person{
private Person person;
public Lucy(Person person){
this.person=person;
}
public void getPerson(Person person){
this.person=person;
}
@Override
public void doSomeThing() {
this.person.doSomeThing();
}
@Override
public void doSomeThingElse(String arg) {
this.person.doSomeThingElse(arg);
}
}

/*
* 动态代理类
*/
class Maria implements InvocationHandler{
private Object person;
public Maria(Object person){
this.person=person;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("\n_____person\t:"+person.getClass()+
"\nmethod:"+method+"\targs"+args);
if(args!=null){
for(Object arg:args){
System.out.println("+++++++"+arg);
}
}
return method.invoke(person, args);
}
}
public class Afgency {
public static void doWork(Person person){
person.doSomeThing();
System.out.println("******************");
person.doSomeThingElse("---------------------");
}
public static void main(String [] args){
//doWork(new Lucy(new Peter()));
//动态代理对象创建
Person person=(Person)Proxy.newProxyInstance(Person.class.getClassLoader()
, new Class[]{Person.class}, new Maria(new Peter()));
doWork(person);
}
}

二、结果展示

_____person	:class com.lattice.dtagency.Peter
method:public abstract void com.lattice.dtagency.Person.doSomeThing()	argsnull
Peter likes fishing!
******************

_____person	:class com.lattice.dtagency.Peter
method:public abstract void com.lattice.dtagency.Person.doSomeThingElse(java.lang.String)	args[Ljava.lang.Object;@1a3a2a52
+++++++---------------------
Peter else likes swimming!---------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息