动态代理例子(一)
该实例是模拟安全性检查
public class TestMain{
public static void main(String[] args) {
//产生一个安全代理的对象方法
SecurityHandler handler = new SecurityHandler();
//得到一个已经被代理的对象
UserManager userManager = (UserManager)handler.newProxy(new UserManagerImp());
User user = new User();
user.setAge(23);
user.setId(1);
user.setName("huangbiao");
//被代理对象做数据业务之前会先调用invoke()方法
userManager.aadUser(user);
}
}
继承InvocationHandler接口
/*
* 1、动态代理类一定要实现InvocationHandler接口,就要实现invoke()方法
*/
public class SecurityHandler implements InvocationHandler {
private Object targetObject;
/*
* 下面方法是得到代理对象,如果得不到代理对象,这个效果也是没有作用的
* 最后一个参数是InvocationHandler接口,这也是为什么动态代理对象一定要实现这个接口的原因
* 得到的代理对象会执行invoke()方法
*/
public Object newProxy(Object targetObject){
this.targetObject = targetObject;
//得到代理对象的方法,这个是反射机制里面的对象方法
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
targetObject.getClass().getInterfaces(),
this);
}
/*
* 在代理对象之前做业务处理,然后再做对象定义的方法,因此最后要返回代理的对象
*/
@Override
public Object invoke(Object proxcy, Method method, Object[] args)
throws Throwable {
checkSecurity();
return method.invoke(this.targetObject, args);
}
public void checkSecurity(){
System.out.println("-----------checkSecurity()----------");
}
}
回忆过去,珍惜现在,放眼未来

浙公网安备 33010602011771号