Proxy动态代理

1.文件结构


2. Rent.java 接口

package com.wyyblog.dynamicProxy;

public interface Rent {

	public void rent();
}

3. ProxyInvocationHandler.java 动态代理类

package com.wyyblog.dynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyInvocationHandler implements InvocationHandler {

	private Object object;
	
	public void setRent(Object object) {
		this.object = object;
	}
	
	/**
	 * 生成代理类
	 */
	public Object getProxy() {
		return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
	}
	
	
	/**
	 * proxy 是代理类
	 * method 是代理类调用处理程序 的方法对象
	 */
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		log(method.getName());
		Object result = method.invoke(object, args);
		return result;
	}
	
	/**
	 * 扩展日志方法
	 * @param methodName方法名
	 * 可以自定义其他的方法进行扩展
	 */
	private void log(String methodName) {
		System.out.println("执行"+ methodName+"方法");
	}

}

4. Host.java 实现类

package com.wyyblog.dynamicProxy;

public class Host implements Rent{

	public void rent() {
		System.out.println("租房子");
	}
	
	
}

5. Client.java 测试类

package com.wyyblog.dynamicProxy;

public class Client {

	public static void main(String[] args) {
		Host host = new Host();
		ProxyInvocationHandler pih = new ProxyInvocationHandler();
		pih.setRent(host);
		Rent proxy = (Rent)pih.getProxy();
		proxy.rent();
	}
	
}

6. 总结:

    一个动态代理一般代理某一类业务,一个动态代理可以代理各种接口(类)。

猜你喜欢

转载自blog.csdn.net/qq_37791322/article/details/79694686