动态代理设计模式
由于静态代理设计模式,在代理功能比较多时,代理类中方法需要写很多,
为了解决镜头代理频繁编写代理功能缺点,引入了动态代理。
接口
package com.fd.proxy.dynamic;
public interface Func {
public void A();
public void B();
public void C();
}
真实类
package com.fd.proxy.dynamic;
public class MyProxy implements Func{
@Override
public void A() {
System.out.println("Proxy A");
}
@Override
public void B() {
System.out.println("Proxy B");
}
@Override
public void C() {
System.out.println("Proxy C");
}
}
代理类 代理类需要实现InvocationHandler,通过反射机制进行调用真实类的方法
package com.fd.proxy.dynamic;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class Agent implements InvocationHandler{
private MyProxy proxy = new MyProxy();
@Override
public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
System.out.println("Agent Before Method");
Object obj = arg1.invoke(proxy, arg2);
System.out.println("Agent After Method");
return obj;
}
}
测试
package com.fd.proxy.dynamic;
import java.lang.reflect.Proxy;
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Agent agent = new Agent();
Func func = (Func)Proxy.newProxyInstance(TestMain.class.getClassLoader(), new Class[] {Func.class}, new Agent());
func.A();
func.B();
func.C();
}
}

浙公网安备 33010602011771号