参考文档: http://blog.youkuaiyun.com/pangqiandou/article/details/52964066
动态代理: 产生一个对象的代理对象,代理对象类似于现实生活中的代理人,拦截对真实业务对象的访问
"java.lang.reflect.Proxy"类
static
Object
newProxyInstance
(ClassLoader loader, Class<?>
[] interfaces, InvocationHandler h)
ClassLoader loader 用来指明生成代理对象使用哪个类装载器,
Class<?>[] interfaces 用来指明生成哪个对象的代理对象,
InvocationHandler h 用来指明这个代理对象要做什么事。
所以如果你想要一个对象,new
maRong
()一个就好了。
如果想要一个经纪人的话,可以
newProxyInstance(songZhe.class.getClassLoader(),maRong.getClass().getInterfaces(),
new InvocationHandler(){
"恭喜你,解锁新物品:‘原谅帽!’"
}
实际上这里的InvocationHandler接口只定义了一个invoke方法,所有直接写一个匿名内部类以实现该方法,
public Object
invoke
(Object
proxy
(把代理对象自己传递进来),Method
method
(代理对象当前调用的方法),Object[]
args
(方法参数)) {
if(method.getName().equals("出轨"){
“
恭喜你,解锁新物品:‘原谅帽!
” }
}
动态代理的好处在于不管对象调用的是什么方法,都会被invoke方法拦截,所以在做检查用户是否有访问权限的时候、或者为某个对象添加额外的功能,都会有很大作用。