jdk动态代理
来源:互联网 发布:java就业班 编辑:程序博客网 时间:2024/05/02 23:03
jdk动态代理基于接口实现,你需要代理的对象应该实现了一个或者多个接口,这个也是因为接口的好处显而易见,接口使你程序容易扩展,耦合性更低。jdk动态代理需要用到invocationHandler,要了解动态代理了解反射是前提。还是写一个例子吧。
首先写一个接口:
package com.test.testDymanicProxy;public interface userDAO {public void save();public void talk();}
实现接口:
package com.test.testDymanicProxy;public class userImpl implements userDAO{public void save() {// TODO Auto-generated method stubSystem.out.println("user be saved");}public void talk() {// TODO Auto-generated method stubSystem.out.println("I'm talking");}}用自己的myHandler实现invocationHandler接口,实现invoke方法:
package com.test.testDymanicProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class testHandler implements InvocationHandler{private Object target;//要代理的那个对象public testHandler(Object target){this.target=target;}public void before(){System.out.println("save before");}public void after(){System.out.println("saved after");}/** *param proxy生成代理类实例 *param method 调用方法类实例,比如你调用了save方法就是save方法实例 *param args 调用方法类实例的参数,比如你method需要传入参数,放在args里面 */public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// TODO Auto-generated method stubbefore();method.invoke(target, args);after();return null;}}生成代理:
package com.test.testDymanicProxy;import java.lang.reflect.Proxy;public class test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubuserDAO userdao=new userImpl();testHandler handler=new testHandler(userdao);userDAO userproxy=(userDAO)Proxy.newProxyInstance(userdao.getClass().getClassLoader(), new Class[]{userDAO.class,personDAO.class}, handler); userproxy.save(); userproxy.talk();}}动态代理的好处很多,比如说你的方法已经写完提交,但是要在众多方法里面添加日志,如果按照传统的方法,我们可能会使用组合的方法,或者继承该类重写要改的方法,但是方法多了,你组合也要重写很多代码,继承就更不应该了,我们说要慎用继承,能不用继承就不用继承,像这种从上到下的编程方式在这好像不太方便,但是我们如果使用动态代理,你只需要将要改的类的传进handler里面,将要代理的接口传入就行了,这个也叫面向切面编程,在spring也叫AOP。
0 0
- 代理模式,JDK动态代理
- Java动态代理--jdk代理
- 代理模式-JDK动态代理
- JDK中的动态代理
- JDK动态代理
- JDK动态代理
- JDK动态代理
- jdk动态代理(暂)
- JDK动态代理
- JDK动态代理实例
- jdk 动态代理
- JDK动态代理
- JDK动态代理说明
- jdk动态代理
- JDKDynamicProxy JDK动态代理
- JDK动态代理实现
- JDK 动态代理
- JDK动态代理
- POJ 1511 Invitation Cards (spfa)
- mysql架构组成
- windy数
- 字符串翻转练习—三步翻转法
- contentprovider 自定义内容提供者
- jdk动态代理
- poj3278
- UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
- JavaScript实现自定义对象的自定义事件
- 从零开始学Android应用安全测试
- 一个函数名后面加const表示什么意思
- UCGUI/emWIN给按钮添加背景图片
- poj3299
- visual studio 2013 常用快捷键整理(持续更新)