JDK的动态代理
来源:互联网 发布:cf淘宝商城 编辑:程序博客网 时间:2024/06/09 11:01
JDK动态代理:对实现了接口的类生成代理
首先有一个接口UserDao
package com.shyleo.demo1;public interface UserDao {public void add();public void delete();}
实现类UserDaoImpl
package com.shyleo.demo1;public class UserDaoImpl implements UserDao{@Overridepublic void add() {System.out.println("添加用户..");}@Overridepublic void delete() {System.out.println("删除用户..");}}
JDKProxy动态代理类
package com.shyleo.demo1;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class JDKProxy implements InvocationHandler{public JDKProxy(){}getprivate Object target;public JDKProxy(Object target){this.target=target;}public UserDao createProxy(){System.out.println("createProxy方法..");UserDao proxy=(UserDao) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);return proxy;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("invoke方法....");if("add".equals(method.getName())){System.out.println("===添加日志==="); //增强的代码//Object result=method.invoke(userDao, args); //result是方法的返回值,在这里method.invoke(userDao, args);就是调用add方法,result就是add方法的返回值Object result=method.invoke(target, args); //result是方法的返回值,在这里method.invoke(userDao, args);就是调用add方法,result就是add方法的返回值return result;}//return method.invoke(userDao, args);return method.invoke(target, args);}}
测试代码:
@Testpublic void test2(){// 被代理对象UserDao userDao=new UserDaoImpl();// 创建代理对象的时候传入被代理对象.UserDao proxy=new JDKProxy(userDao).createProxy();proxy.add();proxy.delete();}
1 0
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- JDK的动态代理
- Jdk的动态代理
- JDK的动态代理机制
- JDK的动态代理机制
- JDK的动态代理原理
- JDK的动态代理机制
- JDK的动态代理机制
- JDK的动态代理机制
- jdk动态代理的实现
- JDK的动态代理机制
- Aop的jdk动态代理
- JDK的动态代理机制
- JDK的动态代理特性
- JDK的动态代理机制
- 关于attachEvent和addEventListener
- libcaffe Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Input (known types: )
- sql创建表+查询表名,表空间信息+数据类型+函数length,trim,to_date
- C++primer第十六章string与STL(1)
- UVA
- JDK的动态代理
- 将二叉树拆成链表
- 设计模式 桥接模式
- OpenJ_Bailian4118 dp
- ubuntu下成功进行栈溢出实验的先决条件
- 浅谈平方和误差函数
- tensorflow的基本用法(九)——定义卷积神经网络训练MNIST
- MyBatis 缓存机制
- Linux 安装 SonarQube 6.0 及Maven项目的使用