【Spring】动态代理
来源:互联网 发布:python爬虫视频教程 编辑:程序博客网 时间:2024/06/06 10:51
动态代理:
1)代理对象,不需要实现接口;
2)代理对象的生成,是利用JDKAPI, 动态的在内存中构建代理对象(需要我们指定创建 代理对象/目标对象 实现的接口的类型)
3) 动态代理, JDK代理, 接口代理;
JDK中生成代理对象的API:
|-- Proxy
staticObject newProxyInstance(
ClassLoader loader, 指定当前目标对象使用类加载器
Class<?>[] interfaces, 目标对象实现的接口的类型
InvocationHandler h 事件处理器
)
注意:代理对象不需要实现接口,但是目标对象一定要实现接口;否则不能用动态代理!下面我们同样以例子来说明:
首先创建一个IUserDao接口,然后创建目标对象UserDao去实现接口
package cn.qblank.b_dynamic;/** * 目标对象:需要实现接口 * @author Administrator * */public class UserDao implements IUserDao{@Overridepublic void save(){System.out.println("保存数据");}}
然后创建代理工厂ProxyFactory
package cn.qblank.b_dynamic;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * 代理工厂 * 不需要实现接口 * @author Administrator * */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() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("开启事务");Object returnValue = method.invoke(target, args);System.out.println("提交事务");return returnValue;}});}}然后我们测试下
package cn.qblank.b_dynamic;public class Test {public static void main(String[] args) {//创建目标对象IUserDao target = new UserDao();//构建代理对象IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance();proxy.save();}}
运行结果如下:
阅读全文
0 0
- 【spring】静态代理&&动态代理
- spring静态代理 动态代理
- spring静态代理 动态代理
- spring静态代理 动态代理
- spring静态代理 动态代理
- Spring 关于动态代理
- Spring中的动态代理
- Spring动态代理
- Spring 动态代理
- Spring 中的动态代理
- spring动态代理
- spring动态代理
- spring动态代理基本原理
- Spring动态代理实现
- Spring动态代理使用
- Spring Aop 动态代理
- Spring-动态代理
- Spring动态代理实现
- 在 Android 8.0 中绕过 hwbinder 实现跨模块对 audio HAL 调用
- GitHub 发布年度开发者报告 JavaScript 依然最受欢迎
- 去除List集合中的重复值
- 模糊查询和聚会函数
- 初识别
- 【Spring】动态代理
- PullToRefreshscrollview的具体使用
- 前端 Highcharts图表,如何动态传入数据
- Java与C++
- git 使用流程
- android studio ndk开发 操作流程
- selenium与firefox、 chrome版本对应关系
- 关于点击图片弹出遮罩层查看
- centos7 安装PostgreSQL