初始spring(八)
2016-08-08 15:51
120 查看
spring代理之动态代理
IUserDao.javapackage cn.itcast.b_dynamic; // 接口 public interface IUserDao { void save(); }
UserDao.java
package cn.itcast.b_dynamic; /** * 目标对象 * @author Jie.Yuan * */ public class UserDao implements IUserDao{ @Override public void save() { System.out.println("-----已经保存数据!!!------"); } }
创建代理工厂
package cn.itcast.b_dynamic; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 给所有的dao创建代理对象【动态代理】 * * 代理对象,不需要实现接口 * @author Jie.Yuan * */ 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; } }); } }
App.java
package cn.itcast.b_dynamic; public class App { public static void main(String[] args) { // 目标对象 IUserDao target = new UserDao(); // 【原始的类型 class cn.itcast.b_dynamic.UserDao】 System.out.println(target.getClass()); // 给目标对象,创建代理对象 IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance(); // class $Proxy0 内存中动态生成的代理对象 } }
运行结果:
开始事务…
—–已经保存数据!!!——
提交事务…
相关文章推荐
- SpringBoot初始教程之SpringBoot-Metrics监控(十)
- 初始Spring(一)
- 初始springboot
- 初始Spring(一)
- spring--总体初始
- “Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常。-解决方法
- 初始Spring
- 初始Spring(一)
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- Spring-Boot初始篇
- Spring Data JPA(一):@id @generatedvalue设置初始值
- SpringBoot初始教程之日志处理(二)
- SpringBoot初始教程之Servlet、Filter、Listener配置(七)
- 关于spring容器初始两次的问题
- Spring初始了解笔记
- 初始Spring(一)
- 详解SpringBoot初始教程之Tomcat、Https配置以及Jetty优化
- SpringBoot初始教程之日志处理(二)-1
- 初始Spring(一)
- SpringBoot初始教程之日志处理(二)