`

Java 动态代理

    博客分类:
  • Java
 
阅读更多
America.java
package com.myproject.proxy;

public interface America {
	public String speakEnglish();
}




Chinese.java
package com.myproject.proxy;

public interface Chinese {
	
	public String speakChinese();

}


Hybrid.java
package com.myproject.proxy;

public class Hybrid implements Chinese, America{

	public String speakEnglish() {
		
		return "I'm speaking Chinese";
	}

	public String speakChinese() {

		return "I'm speaking English";
	}
}




MyInvocationHandler.java
package com.myproject.proxy;

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

public class MyInvocationHandler implements InvocationHandler{

	private Object obj;
	
	public MyInvocationHandler(Object object){
		this.obj = object;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
	
		return method.invoke(obj, args);
	}

}



Teacher.java
package com.myproject.proxy;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Proxy;

public class Teacher {
	
	public static void main(String[] args){
		
		Hybrid hybrid = new Hybrid();
		
		InvocationHandler handler = new MyInvocationHandler(hybrid);
		
		Chinese chinese = (Chinese)Proxy.newProxyInstance(Chinese.class.getClassLoader(), new Class[]{Chinese.class}, handler);
	
		System.out.println(chinese.speakChinese());
		
		
		America america = (America)Proxy.newProxyInstance(hybrid.getClass().getClassLoader(), (Class[])(hybrid.getClass().getInterfaces()), handler);
		
		System.out.println(america.speakEnglish());
	}

}



output:
I'm speaking English
I'm speaking Chinese

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics