标签:loader eth anti pre 参数 err java mic invoke
动态代理是javase中重要的一环,比如说spring框架的aop基本上都是用动态代理实现的。
动态代理也能帮助程序员减少工作量,减少代码的冗余。
但是java本身的动态代理必须是实现了接口的类才能运用代理,这是一个缺点。
接口:
public interface HireHouse {
public void hire();
}
接口实现类:
public class HireHouseImpl implements HireHouse {
@Override
public void hire() {
System.out.println("租房");
}
}
动态代理实现(反射):
动态代理必须实现InvocationHandler接口,然后重写invoke方法来处理其它事物。
public class DynamicProxy implements InvocationHandler {
private Object obj;
public DynamicProxy(Object obj) {
this.obj = obj;
}
/**
* 动态代理
* 优化代码
* 能将功能相近的一些类的方法 集中到一个动态代理类中进行处理,减少代码冗余。
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("前置工作");
Object invoke=method.invoke(obj, args);
System.out.println("后置工作");
return invoke;
}
}
动态代理类的实现:
/**
* 测试: 动态代理
* 1.声明实体对象
* 2.通过动态代理的方式代理被代理者的所有方法
* 参数 1.获取实体的类加载器,2.获取实体类的所有接口,3.声明代理类并传入需要代理的实体类。
*/
@Test
public void testDynamicProxy() throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
HireHouseImpl hhi=new HireHouseImpl();
HireHouse hireHouse=(HireHouse) Proxy.newProxyInstance(hhi.getClass().getClassLoader(), hhi.getClass().getInterfaces(), new DynamicProxy(hhi));
hireHouse.hire();
}
标签:loader eth anti pre 参数 err java mic invoke
原文地址:http://www.cnblogs.com/smallbrokenchildwen/p/7287382.html