动态代理例子(一)

该实例是模拟安全性检查

 

 

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()----------");
	}
}

 

 

 

posted @ 2012-01-06 19:22  胖鹅  阅读(224)  评论(0编辑  收藏  举报