java 代理实践
来源:互联网 发布:php chmod 777 编辑:程序博客网 时间:2024/05/21 19:46
why ?
当一个对象不能或者不想直接访问另一个对象时,可以通过一个代理对象来间接访问。为保证客户端使用的透明性,委托对象和代理对象要实现同样的接口。被访问的对象不想暴露全部内容时,可以通过代理去掉不想被访问的内容。
动态代理和静态代理优缺点
静态代理: 有点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。缺点:(1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。(2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。动态代理:优点:1、协调调用者和被调用者,降低系统耦合度。2、用小对象代表大对象,减少系统资源消耗,提高系统运行速度,如虚拟代理。3、控制用户对呗调用者的使用权限,如保护代理。缺点:1、首先当然是比直接调用原始对象多了一个中间者,会让结构有点复杂。2、调用原始对象的方法要通过代理来调用,可能会造成请求处理速度变慢。
java 静态代理
第一步: 创建接口
public interface ILawsuit { void submit();//提交申请}
第二步: 实现者
public class Civilian implements ILawsuit { @Override public void submit() { System.out.println("起诉"); }}
第三步: 调用者(代理类)
public class Lawyer implements ILawsuit { private ILawsuit civilian; public Lawyer(ILawsuit civilian) { this.civilian = civilian; } @Override public void submit() { civilian.submit(); }}
第四步: 测试
ILawsuit civilian = new Civilian(); ILawsuit lawyer = new Lawyer(civilian); lawyer.submit();
java 动态代理
第一步: 创建接口
public interface ILawsuit { void submit();//提交申请}
第二步: 实现者
public class Civilian implements ILawsuit { @Override public void submit() { System.out.println("起诉"); }}
第三步: 代理类
public class UserServiceInvocationHandler implements InvocationHandler {private Object delegate;public UserServiceInvocationHandler(Object delegate) { super(); this.delegate = delegate;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("Dynamic Before add"); Object object = method.invoke(delegate, args); System.out.println("Dynamic After add"); return object; }}
第四步: 测试
ILawsuit lawsuit = new Civilian();UserServiceInvocationHandler proxy = new UserServiceInvocationHandler(lawsuit);(1)第一种方法//和一个InvocationHandler的实现,也就是前面创建的proxy。ILawsuit lawyer = (ILawsuit) Proxy.newProxyInstance(lawsuit.getClass().getClassLoader(),new Class[]{ILawsuit.class},proxy);lawyer.submit();(2)第二种方法 Class<?> proxyClass = Proxy.getProxyClass(Foo.class.getClassLoader(), ILawsuit.class); ILawsuit lawyer = (ILawsuit) proxyClass.getConstructor(UserServiceInvocationHandler.class). newInstance(proxy); lawyer.submit();
阅读全文
0 0
- java 代理实践
- Java动态代理之实践
- Java实践:用动态代理进行修饰 动态代理 动态代理 动态代理
- Java 理论与实践: 用动态代理进行修饰
- Java 理论与实践: 用动态代理进行修饰
- Java 理论与实践: 用动态代理进行修饰
- 代理模式初步实践
- 反向代理技术实践
- 实践一下动态代理
- nginx反向代理实践
- 代理模式之动态代理实践
- Java 代理,动态代理
- java代理静态代理
- JDK动态代理的实践
- CgLib动态代理初步实践
- Java 理论与实践: 用动态代理进行修饰(可以借鉴到spring的学习)
- java反射机制(2)- 实践:反射机制+动态代理实现模拟RMI远程方法调用
- 大型网站系统与JAVA中间件实践——chapter1-4之代理
- java基础面试题3
- linux常用指令
- 求职经历笔试题之美乐威
- Ambari安装之安装并配置Ambari-server(三)
- STL set_difference set_intersection set_union 操作
- java 代理实践
- 类和对象
- <!DOCTYPE> 知识点回顾
- LeetCode-43-Multiply Strings 模拟
- Ambari安装之部署单节点集群
- 使用Unity3D制作技能图标冷却效果
- Spring的bean的生命周期
- Appserv连接Mysql失败解决方式
- LeetCode 338. Counting Bits (Medium)