java 动态代理Dynamic proxy

来源:互联网 发布:网络拓扑的优缺点 编辑:程序博客网 时间:2024/04/28 07:06
public interface Person {public abstract void eat();public abstract void sleep();}

public class Droid implements Person{@Overridepublic void eat() {System.out.println("机器人也要吃饭!");}@Overridepublic void sleep() {System.out.println("机器人也要睡觉!");}}

public class PersonHandler implements InvocationHandler {private Object targetObject;// 需要代理的对象public PersonHandler(Object obj) {           this.targetObject=obj;}@Overridepublic Object invoke(Object obj, Method method, Object[] args) throws Throwable {Object returnValue = null;this.before(method, args, obj);try {returnValue = method.invoke(targetObject, args);} catch (Exception e) {this.afterThrowing(e);} finally {this.after(returnValue, method, args, obj);}return returnValue;}private void before(Method method, Object[] args, Object target){System.out.println("###############before--invoked:" + method.getName());}private void after(Object returnValue, Method method, Object[] args, Object target){System.out.println("###############after--invoked:" + method.getName());}public void afterThrowing(Throwable e) throws Throwable {System.out.println("###############throw--invoked:" + e.getMessage());throw e.getCause();}}

public class DroidTest {/** * @desc <pre> * 1.什么是动态代理? *  * 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。 * 2.为什么使用动态代理? *  * 答:因为动态代理可以对请求进行任何处理 *  * 3.使用它有哪些好处? *  * 答:因为动态代理可以对请求进行任何处理 * 4.哪些地方需要动态代理? *  * 答:不允许直接访问某些类;对访问要做特殊处理等 * </pre> * @author Weiliang Hu * @date 2013-9-10 * @param args */public static void main(String[] args) {Person person = new Droid();person.eat();person.sleep();PersonHandler handler = new PersonHandler(person);Person personProxy = (Person) Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), handler);personProxy.eat();personProxy.sleep();}/** * result ###############before--invoked:eat 机器人也要吃饭! ###############after--invoked:eat * ###############before--invoked:sleep 机器人也要睡觉! ###############after--invoked:sleep */}


原创粉丝点击