代理模式

来源:互联网 发布:淘宝互踩 编辑:程序博客网 时间:2024/05/29 13:21

调接口,可设计代理。代码如下:

public interface Person {String name = "liu";int age = 20;void print();}

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 代理模式 :延迟加载减少系统开销或者aop * */public class proxyTest implements Person{private Person person;public proxyTest(Person person){this.person = person;}public void print() {if(person == null){this.person = new Children();}person.print();}public static void main(String[] args) throws InstantiationException, IllegalAccessException {//延迟加载new proxyTest(null).print();//我是小孩Person p = Student.class.newInstance();new proxyTest(p).print();//我是学生//-------AOPMyInvocatHandler handler = new MyInvocatHandler();Person stu = new Student();handler.setObject(stu);Person stu_proxy = (Person)Proxy.newProxyInstance(stu.getClass().getClassLoader(), stu.getClass().getInterfaces(), handler);stu_proxy.print();//输出beginging我是学生aftered}}class Children implements Person{public void print() {System.out.println("我是小孩");}}class Student implements Person{public void print() {System.out.println("我是学生");}}class TxUtil {void beginTx(){System.out.println("beginging");}void afterTx(){System.out.println("aftered");}}class MyInvocatHandler implements InvocationHandler{private Object obj;void setObject(Object obj){this.obj = obj;}public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {TxUtil tx = new TxUtil();tx.beginTx();Object result = method.invoke(obj, args);tx.afterTx();return result;}}


0 0
原创粉丝点击