动态代理小小进阶
?
?? 今天温故了下动态代理设计模式,顺便写了写笔记,对动态代理添加了些自己的一些想法
??以下是一些类的依赖关系

通过上面的动态代理工厂生成任何你需要的代理对象,并传入任何你想要的处理,所以设计了两个接口,如上图所示
下面是动态代理工厂,(这里同时用了静态工厂设计模式)通过getproxy方法获得代理对象
package Factory;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//动态代理工厂
public class ProxyFactory {
?
?private ProxyFactory() {
?}
/**
?*
?* @param o
?* @param handler? 动态代理类的动态处理类
?* @return
?*/
?public static Object getproxy(final Object o,final Handler handler) {
??InvocationHandler objhandler = new InvocationHandler() {
???@Override
???public Object invoke(Object proxy, Method method, Object[] args)
?????throws Throwable {
????handler.handbefore();
????method.invoke(o, new Object[] {});
????handler.handafter();
????return null;
???}
??};
??return Proxy.newProxyInstance(ProxyFactory.class.getClassLoader(), o
????.getClass().getInterfaces(), objhandler);
?}
}
下面是被代理对象接口
package Factory;
public interface Role {
?
public void? sayHello();?
?
?
}
下面是被被代理对象
package Factory;
public class RoleImpl implements Role {
?@Override
?public void sayHello() {
?
??System.out.println("RoleImpl------->sayhello");
?}
}
?
下面是被代理对象的接口
package Factory;
public interface Handler {
public void handbefore();
public void handafter();
}
下面是被代理对象1
?
package Factory;
public class FirstHandler implements Handler {
?@Override
?public void handbefore() {
?
??System.out.println("this is my FirstHandler------->before");
?}
?@Override
?public void handafter() {
??
??System.out.println("this is my FirstHandler------->after");
?}
}
?
下面是被代理对象2
package Factory;
public class SecondHandler implements Handler {
?@Override
?public void handbefore() {
?
??System.out.println("this is my SecondHandler------->before");
?}
?@Override
?public void handafter() {
??
??System.out.println("this is my SecondHandler------->after");
?}
}
下面是测试类
package Factory;
public class Test {
?/**
? * @param args
? */
?public static void main(String[] args) {
??Role role=new RoleImpl();
??Handler? handler1=new FirstHandler();
??Handler? handler2=new SecondHandler();
??Role? ro=(Role)ProxyFactory.getproxy(role, handler1);
??ro.sayHello();
??ro=(Role)ProxyFactory.getproxy(role, handler2);
??????? ro.sayHello();
?}
}
?
测试类打印的结果是
?
this is my FirstHandler------->before
RoleImpl------->sayhello
this is my FirstHandler------->after
this is my SecondHandler------->before
RoleImpl------->sayhello
this is my SecondHandler------->after
通过以上的实例,可以轻松的生成任意动态代理对象,并融入自己的处理类,方便实现自己的业务逻辑!!!
?
?