动态代理模式和责任链模式
来源:互联网 发布:java中poi是什么意思 编辑:程序博客网 时间:2024/06/05 14:30
代理:即中介的意思,比如客户,公司产品经理,软件工程师之间的管理。产品经理为代理者,软件工程师为被代理者。回到代码中,客户就是主程序,软件工程师就是切面程序1.最常用的代理技术有两种:JDK(jdk自带)和CGLIB(第三方提供的技术)。spring常用jdk和cglib,mybatis用Javassist。
2.JDK中我们必须使用接口(定义一个接口然后去实现这个接口),cglib不需要(更简单一点)
3.JDK代理中要实现代理逻辑类就必须去实现java.lang.reflect.InvocationHandler接口,他里面定义了一个invoke方法,并提供接口数组用于下挂代理对象。
例子如下
3.1定义被代理对象(真是对象)
3.11:接口
public interface HelloWorld {
public void sayHello(String name, int age);
public void getResult(String name);
}
3.12:接口实现类:
public class HelloWorldImp implements HelloWorld {
@Override
public void sayHello(String name, int age) {
// TODO Auto-generated method stub
System.out.println("我是" + name + "我" + age);
}
@Override
public void getResult(String name) {
System.out.println("我是" + name);
}
}
3.2:代理绑定和代理逻辑实现
public class JdkExample implements InvocationHandler {
private Object target = null;
//绑定,传入一个被代理对象,输出一个代理对象
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
//设定代理逻辑
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("开始了");
Object object = method.invoke(target, args);
System.out.println("结束了");
return object;
}
}
//测试:
public class TestJdk {
public static void main(String[] args) {
JdkExample jdk = new JdkExample();
HelloWorld h = (HelloWorld) jdk.bind(new HelloWorldImp());
h.sayHello("lg", 25);
}
}
4.CGLIB动态代理
和jdk类似,但是需要导入架包,参考22页
- 动态代理模式和责任链模式
- 代理模式和动态代理
- 代理模式和动态代理
- 静态代理模式和动态代理模式
- 代理模式和动态代理模式
- 代理模式和动态代理模式
- 代理模式--静态代理和动态代理
- 责任链模式和状态模式对比
- 静态代理和动态模式
- 设计模式- 代理模式 (静态代理 和 动态代理)
- 设计模式之代理模式--静态代理和动态代理
- 代理模式和Java动态代理
- java代理模式和动态代理
- java代理模式和动态代理
- 代理模式和java动态代理
- 代理模式和JDK动态代理
- 代理模式和 Java 动态代理
- java代理模式和动态代理
- 登录注册+接口
- zuul No route found for uri:
- 认识Linux数据重定向redirection
- 安卓蓝牙bluetooth开发全解
- 51nod 1089 最长回文子串 V2(Manacher算法)
- 动态代理模式和责任链模式
- 53. Maximum Subarray
- LeetCode刷题(14)
- 心得,在工作中学会”忽悠”别人
- 网狐棋牌 消息命令
- 请求网络数据实现登陆注册
- justify-content的属性详解
- IE6兼容适配问题
- Web开发——问题:js/css文件修改提交后,没有效果