需要被代理的接口和类。注意:必须要定义接口。
package com.yan.proxy.object;
public interface ProxyObjectI {
public void sayHello();
}
被代理的类
package com.yan.proxy.object;
public class ProxyedObject implements ProxyObjectI{
@Override
public void sayHello() {
System.out.println("hello");
}
}
两个代理类authority log
package com.yan.proxy.object;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class AuthorityProxy implements InvocationHandler {
private Object proxy;
@Override
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
doBefore();
Object result = method.invoke(proxy, args);
doAfter();
return result;
}
public AuthorityProxy(Object proxy) {
this.proxy = proxy;
}
private void doBefore() {
System.out.println("before you are authoried! ");
}
private void doAfter() {
System.out.println("after you are authoried! ");
}
}
package com.yan.proxy.object;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class LogProxy implements InvocationHandler {
private Object proxy;
public LogProxy(Object proxy) {
this.proxy = proxy;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
doBefore();
Object result = method.invoke(this.proxy, args);
doAfter();
return result;
}
private void doBefore() {
System.out.println("before logging.............. ");
}
private void doAfter() {
System.out.println("after logging..............");
}
}
测试类
package com.yan.proxy.object;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
ProxyObjectI object = new ProxyedObject();
InvocationHandler authHandler = new AuthorityProxy(object);
ProxyObjectI authProxy = (ProxyObjectI) Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), authHandler);
InvocationHandler logHandler = new LogProxy(authProxy);
ProxyObjectI proxy = (ProxyObjectI) Proxy.newProxyInstance(authProxy.getClass().getClassLoader(), authProxy.getClass().getInterfaces(), logHandler);
proxy.sayHello();
}
}
输出结果:
before logging..............
before you are authoried!
hello
after you are authoried!
after logging..............
可以看到对象被一层一层的代理对象所封装。
分享到:
相关推荐
NULL 博文链接:https://xueyue.iteye.com/blog/1202897
NULL 博文链接:https://changaiqing.iteye.com/blog/1487140
NULL 博文链接:https://sunlibao123.iteye.com/blog/1837500
NULL 博文链接:https://871656094.iteye.com/blog/2355335
NULL 博文链接:https://jadeluo.iteye.com/blog/1940019
代码 博文链接:https://callan.iteye.com/blog/161806
NULL 博文链接:https://pluto418.iteye.com/blog/1692218
java设计模式(工厂模式,动态代理,责任链模式……)实例源码
NULL 博文链接:https://lgstarzkhl.iteye.com/blog/606242
NULL 博文链接:https://wmwork2010.iteye.com/blog/631978
NULL 博文链接:https://justdo2008.iteye.com/blog/796290
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
NULL 博文链接:https://whp0731.iteye.com/blog/343787
对应的博客链接:http://blog.csdn.net/JQ_AK47/article/details/60469034#t12
NULL 博文链接:https://xh32t03.iteye.com/blog/2047832
狗星例子所以java文件 博文链接:https://uule.iteye.com/blog/859862
NULL 博文链接:https://zhouxianglh.iteye.com/blog/523783
NULL 博文链接:https://softwarexiang120.iteye.com/blog/2277356
NULL 博文链接:https://zlx19900228.iteye.com/blog/843289