Java动态代理机制——JDK
2024-09-13 15:12:06
动态代理机制是Spring AOP编程的原理基础。
JDK的动态代理机制有个限制就是它只能代理实现了一个或多个接口的类。如PersonImpl得实现Person接口,才能用JDK动态代理机制。
定义一个Person的接口:
package wang.dao; public interface Person { public void eat();
public void sleep(); }
定义接口Person的实现类,类的实例就是我们要代理的对象(被代理的对象)
package wang.dao.impl; import wang.dao.Person; public class PersonImpl implements Person{ @Override
public void eat() { System.out.println("吃的方法。。。");
} @Override
public void sleep() { System.out.println("睡的方法。。。");
} }
定义代理处理类。其中主要有以下几点。
1.实现InvocationHandler接口。
2.定义被代理的对象;
3.定义一个方法,将被代理的对象和处理器的实例(this)关联;
4.调用被代理对象的方法。
package wang.proxy; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import com.sun.org.apache.bcel.internal.generic.ReturnaddressType; public class MyProxy implements InvocationHandler {
//2.定义被代理的对象
private Object person;
//3.定义一个方法,将被代理的对象和处理器实例(this)关联。
public Object bind(Object person)
{
this.person = person;
return Proxy.newProxyInstance(this.getClass().getClassLoader(), person.getClass().getInterfaces(),this); } @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理前"); //4.调用被代理对象的方法。
method.invoke(person, args); System.out.println("代理后");
return null;
} }
package wang.test; import wang.dao.Person;
import wang.dao.impl.PersonImpl;
import wang.proxy.MyProxy; public class ProxyTest { /**
* @param args
*/
public static void main(String[] args) { Person person = new PersonImpl();//被代理的对象
MyProxy proxy = new MyProxy();
person = (Person) proxy.bind(person);//
person.eat();
person.sleep(); } }
最新文章
- Foreach能够循环的本质
- java分派
- P1149 火柴棒等式
- Android编程: 界面组成、事件监听器
- TextView 实现复制文本功能
- uva1639 Candy
- Android(java)学习笔记155:如何让你的GridView不再滚动
- java\C#\php主流语言实现FMS流媒体传输协议RTMP的开源组件
- 2015必须要看的APP源码
- HashSet和CopyOnWriteArraySet
- jsp 九大内置对象和其作用详解
- UVA850【简单模拟】
- 本机是wifi,虚拟机无法连接外网问题
- Codechef August Challenge 2018 : Safe Partition
- K-Means算法的10个有趣用例
- Centos socket TCP代码
- webService之helloword(web)
- 解题:BZOJ 5093 图的价值
- 跟我一起学Makefile
- javascript面向对象的程序设计之Object.getOwnPropertyDescriptor()