手机
当前位置:查字典教程网 >编程开发 >Java >轻松掌握Java代理模式
轻松掌握Java代理模式
摘要:和大家一起聊一聊java代理模式1、静态代理1.1静态代理的代理类和和被代理的类都要维护一个共同的接口。publicinterfaceIUs...

和大家一起聊一聊java代理模式

1、静态代理

1.1静态代理的代理类和和被代理的类都要维护一个共同的接口。

public interface IUserDao { void save(); }

1.2被代理的类,目标对象

public class UserDao implements IUserDao{ @Override public void save() { System.out.println("-----已经保存数据!!!------"); } }

1.3代理对象

public class UserDaoProxy implements IUserDao{ // 接收保存目标对象 private IUserDao target; public UserDaoProxy(IUserDao target) { this.target = target; } @Override public void save() { System.out.println("开始事务..."); target.save(); // 执行目标对象的方法 System.out.println("提交事务..."); } }

1.4测试类

public class App { public static void main(String[] args) { // 目标对象 IUserDao target = new UserDao(); // 代理 IUserDao proxy = new UserDaoProxy(target); proxy.save(); // 执行的是,代理的方法 } }

2、动态代理

2.1同样的,动态代理也需要完成一个接口。(同上)

2.2目标对象也是相同的。

2.3只是在代理对象上有所不同

public class ProxyFactory { // 维护一个目标对象 private Object target; public ProxyFactory(Object target){ this.target = target; } // 给目标对象,生成代理对象 public Object getProxyInstance() { return Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("开启事务"); // 执行目标对象方法 Object returnValue = method.invoke(target, args); System.out.println("提交事务"); return returnValue; } }); } }

2.4测试类

public class App { public static void main(String[] args) { // 目标对象 IUserDao target = new UserDao(); System.out.println(target.getClass()); // 给目标对象,创建代理对象 IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance(); System.out.println(proxy.getClass()); // 执行方法 【代理对象】 proxy.save(); } }

3、cglib代理

3.1cglib代理不需要完成接口,只需要写被代理的类和代理类即可,此处被代理类同1.2,所以不再编写。

3.2代理类有所不同,用到cglib代理模式需要引用spring的核心框架包。

public class ProxyFactory implements MethodInterceptor{ // 维护目标对象 private Object target; public ProxyFactory(Object target){ this.target = target; } // 给目标对象创建代理对象 public Object getProxyInstance(){ //1. 工具类 Enhancer en = new Enhancer(); //2. 设置父类 en.setSuperclass(target.getClass()); //3. 设置回调函数 en.setCallback(this); //4. 创建子类(代理对象) return en.create(); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("开始事务....."); // 执行目标对象的方法 Object returnValue = method.invoke(target, args); System.out.println("提交事务....."); return returnValue; } }

3.3测试类

public class App { public static void main(String[] args) { // 目标对象 UserDao target = new UserDao(); System.out.println(target.getClass()); // 代理对象 UserDao proxy = (UserDao) new ProxyFactory(target).getProxyInstance(); System.out.println(proxy.getClass()); // 执行代理对象的方法 proxy.save(); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持查字典教程网。

【轻松掌握Java代理模式】相关文章:

Java代码重构的几种模式详解

Java 的 FileFilter文件过滤与readline读行操作实例代码

junit4教程junit4.5官方下载

java jdk动态代理详解

基于JavaCore文件的深入分析

Java动态代理的应用详解

java代理 jdk动态代理应用案列

轻松掌握Java代理模式

深入XPath的详解以及Java示例代码分析

java 静态代理 动态代理深入学习

精品推荐
分类导航