动态代理

Posted yizhixiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态代理相关的知识,希望对你有一定的参考价值。

动态代理

package test;

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

//被代理类接口
interface Buy{
	public String buyc();
}
//被代理类
class People1 implements Buy{

	@Override
	public String buyc() {
		// TODO Auto-generated method stub
		System.out.println("我要买一个飞机");
		return "飞机买完了";
	}
}

//代理工厂
class ProxyF{
	//获取代理类
	public static Object getProxyInstance(Object obj) {
		
		//通过构造器将被代理类传值给InvocationHandler的实现类
		InvocationHandler handler = new Invoca(obj);
		return Proxy.newProxyInstance(
				obj.getClass().getClassLoader(),
				obj.getClass().getInterfaces(),
				handler);
	}
}

//InvocationHandler实现类
class Invoca implements InvocationHandler{
	Object obj; //被代理类
	Invoca(Object obj){
		this.obj = obj;
	}
	
	
	//代理类要做的事情
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("开启服务");
		Object robj = method.invoke(obj,args);
		System.out.println("更新日志");
		return robj;
	}
	
}




public class Z010_动态代理 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		People1 p = new People1();
		Buy buy = (Buy) ProxyF.getProxyInstance(p);
		String s = buy.buyc();
	}
}

以上是关于动态代理的主要内容,如果未能解决你的问题,请参考以下文章

动态 Rstudio 代码片段

是否可以动态编译和执行 C# 代码片段?

支持动态或静态片段的不同屏幕尺寸?

Forge Viewer - 如何在场景中访问(或获取渲染/片段代理)克隆的网格?

在ansible模板中使用动态组名称

代理模式(动态)