Jdk动态代理
来源:互联网 发布:linux网卡配置生效 编辑:程序博客网 时间:2024/06/05 18:34
1.什么是jdk动态代理
Java动态代理可以动态地创建代理并动态地处理对所代理方法的调用。
2.jdk动态代理示例
Jdk动态代理是必须要有接口,所以我们来定义一接口先,步骤如下。
接口:
public interface IPerson { public void doWork();}
被代理类:
public class Person implements IPerson { @Override public void doWork() { System.out.println("要做的工作"); }}
第一种方式实现动态代理(实现 InvocationHandler接口):
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class PersonProxy implements InvocationHandler { private Person person = new Person(); @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("之前做的操作"); method.invoke(person, args); System.out.println("之后做的操作"); return null; }}
测试类的编写:
import java.lang.reflect.Proxy;import org.junit.Test;public class TestProxy { @Test public void testProsy() throws Exception { Person person = new Person(); IPerson personPrxy = (IPerson) Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass() .getInterfaces(), new PersonProxy()); personPrxy.doWork(); }}输出结果:
之前的工作
要做的工作
之后的工作
第二种实现方式(使用匿名内部类来实现):
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class PersonProxy2 { Person person = new Person(); @SuppressWarnings("unchecked") public <T> T getProxyObject() { //用泛型返回代理对象 return (T) Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("之前的工作"); person.doWork(); System.out.println("之后的工作"); return null; } }); }}
测试代码:
import org.junit.Test;public class TestProxy2 { @Test public void testProsy2() throws Exception { IPerson personProxy = new PersonProxy2().getProxyObject(); personProxy.doWork(); }}输出结果:
之前的工作
要做的工作
之后的工作
阅读全文
0 0
- 代理模式,JDK动态代理
- Java动态代理--jdk代理
- 代理模式-JDK动态代理
- JDK中的动态代理
- JDK动态代理
- JDK动态代理
- JDK动态代理
- jdk动态代理(暂)
- JDK动态代理
- JDK动态代理实例
- jdk 动态代理
- JDK动态代理
- JDK动态代理说明
- jdk动态代理
- JDKDynamicProxy JDK动态代理
- JDK动态代理实现
- JDK 动态代理
- JDK动态代理
- java -- 抽象 接口
- crontab初始化
- Mysql之主从复制-yellowcong
- 微信支付
- JAVA面向对象的基础知识快速通过---自学笔记(一)
- Jdk动态代理
- 购物车代码
- glitch free 时钟切换逻辑的实现
- SpringBoot连接数据库JDBCTemplate方式
- PAT 1006 换个格式输出整数
- 深入理解java抽象与接口
- JDBC使用
- 仿京东分类列表MVP模式请求
- spark1.3版本源码解读