首先对代理做下简单的说明,代理可以具体映射到我们的现实生活中,比如火车票的购买过程,买票的动作可以在火车站的售票窗口执行也可以在火车的代售点购买到,但是在火车代售点只能购票却不能退票,而且在代售的过程中我们需要收取购票费用。代理其实可以理解为代售点,可以理解为代理和目标对象之间代理可能没有目标对象的功能,但是也可以增加目标对象没有的功能。简单的说代理就是对象将一个自己不能去直接或者不想去做的事情交给别的对象做。
public interface IUserService { public abstract void study();}目标对象实现类:public class UserServviceImpl implements IUserService { public void study() { System.out.println("This is study()..."); }}自定义事物管理器:public class MyInvocationHandler implements InvocationHandler { //目标对象 private Object objects; /** * 构造方法 * @param object */ public MyInvocationHandler(Object object) { super(); this.objects = object; } /** *执行目标对象的方法 * @param proxy * @param method * @param args * @return * @throws Throwable */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 在目标对象的方法执行之前简单的打印一下 System.out.println("------------------开始------------------"); Object object=method.invoke(objects,args); // 在目标对象的方法执行之后简单的打印一下 System.out.println("------------------结束------------------"); return object; } }测试类:public class MyInvocationtTest { /** * jDK动态代理测试 */ @Test public void testInvocation(){ // 实例化目标对象 IUserService userService=new UserServviceImpl(); // 实例化InvocationHandler MyInvocationHandler myInvocationHandler=new MyInvocationHandler(userService); // 根据目标对象生成代理对象 IUserService userServices=(IUserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(),userService.getClass().getInterfaces(),myInvocationHandler); // 调用代理对象的方法 userServices.study(); }}
新闻热点
疑难解答