动态代理例子(一)
该实例是模拟安全性检查
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()----------"); } }
回忆过去,珍惜现在,放眼未来