您的位置:首页 > 其它

设计模式之——代理模式(动态代理)

2009-12-08 11:58 232 查看
package proxypackage;
public interface HelloService {
public void getName(String name);
public void echoMessage(String msg);
}


接口实现类:

package proxypackage;
public class HelloServiceImpl implements HelloService{
public void echoMessage(String msg) {
System.out.println("echo:" + msg);
}
public void getName(String name) {
System.out.println("The name is :" + name);
}
}


动态代理产生工厂类。

package proxypackage;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class HelloServiceProxyFactory {
public static HelloService getHelloServiceProxy(final HelloService helloService){
InvocationHandler handler = new InvocationHandler(){
public Object invoke(Object proxy,
Method method,
Object[] args)
throws Exception{
System.out.println("before calling "+method);
Object result = method.invoke(helloService, args);
System.out.println("after calling "+method);
return result;
}
};
HelloService hello = (HelloService)Proxy.newProxyInstance(HelloService.class.getClassLoader(), new Class[]{HelloService.class}, handler
);
return hello;
}
}


调用类:

package proxypackage;
public class client2 {
public static void main(String[] args) throws Exception{
HelloService helloService = new HelloServiceImpl();
HelloService proxy = HelloServiceProxyFactory.getHelloServiceProxy(helloService);
proxy.echoMessage("good");
}
}


输出结果:

before calling public abstract void proxypackage.HelloService.echoMessage(java.lang.String)

echo:good

after calling public abstract void proxypackage.HelloService.echoMessage(java.lang.String)

在动态代理产生工厂里面应用了反射机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: