gallery/image/112445.html">http://www.cnblogs.com/hongten/gallery/image/112445.html
> 代理对象 -------------->> 目标对象
com.b510.service; PersonService { 方法 aram save(String name); aram String getPersonName(Integer personid); 方法 aram aram update(String name,Integer personid); }
com.b510.service.impl; java.lang.reflect.InvocationHandler; java.lang.reflect.Method; java.lang.reflect.Proxy; 用户要调用目标对象的时候,首先调用的是JDKProxyFactory代理类,代理类会执行invoke方法,在这个调用的过程中, 方法的调用委派给目标对象 JDKProxyFactory InvocationHandler { Object targetobject; Object createProxyInstance(Object targetobject) { .targetobject = targetobject; 方法invoke()方法 Proxy.newProxyInstance(.targetobject.getClass() .getClassLoader(), .targetobject.getClass().getInterfaces(),); } 方法invoke() 参数一:代理对象 参数二:被拦截到的方法 参数三:方法的输入参数 方法中的第三个参数拦截到, 方法 @Override Object invoke(Object arg0,Method method,Object[] arg) Throwable { PersonServiceBean bean = (PersonServiceBean) .targetobject; Object result = ; 属性是否为空,如果为空,则不用把方法委派给目标对象 (bean.getUser() != ) { 方法的调用委派给的创建的目标对象 result = method.invoke(targetobject,arg); } result; } }
com.b510.service.impl; com.b510.service.PersonService; PersonServiceBean PersonService { String user = ; PersonServiceBean() { } PersonServiceBean(String user) { .user = user; } String getUser() { .user; } @Override String getPersonName(Integer personid) { System.out.println("this is the getPersonName() function"); "hongten"; } @Override save(String name) { System.out.println("this is the save() function"); } @Override update(String name,Integer personid) { System.out.println("this is the update() function"); } }
com.b510.test; com.b510.service.PersonService; com.b510.service.impl.JDKProxyFactory; com.b510.service.impl.PersonServiceBean; AOPTest { main(String[] args) { JDKProxyFactory factory = JDKProxyFactory(); PersonService service = (PersonService) factory .createProxyInstance( PersonServiceBean("hello")); service.save("hongten"); service.getPersonName(1); service.update("hello",2); System.out.println("*************************"); PersonService service1 = (PersonService) factory .createProxyInstance( PersonServiceBean()); service1.save("hongten"); service1.getPersonName(1); service1.update("hello",2); System.out.println("end"); } }
is the save() function is the getPersonName() function is the update() function ************************* end
属性的值不为空,那么那些方法save(),update(),getPersonName()
调用,而new PersonServiceBean()的时候,没有传递任何参数,结果是不会调用任何方法的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。