动态代理机制是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(); } }

最新文章

  1. Foreach能够循环的本质
  2. java分派
  3. P1149 火柴棒等式
  4. Android编程: 界面组成、事件监听器
  5. TextView 实现复制文本功能
  6. uva1639 Candy
  7. Android(java)学习笔记155:如何让你的GridView不再滚动
  8. java\C#\php主流语言实现FMS流媒体传输协议RTMP的开源组件
  9. 2015必须要看的APP源码
  10. HashSet和CopyOnWriteArraySet
  11. jsp 九大内置对象和其作用详解
  12. UVA850【简单模拟】
  13. 本机是wifi,虚拟机无法连接外网问题
  14. Codechef August Challenge 2018 : Safe Partition
  15. K-Means算法的10个有趣用例
  16. Centos socket TCP代码
  17. webService之helloword(web)
  18. 解题:BZOJ 5093 图的价值
  19. 跟我一起学Makefile
  20. javascript面向对象的程序设计之Object.getOwnPropertyDescriptor()

热门文章

  1. Visual Studio使用技巧
  2. bootstrap-js(3)滚动监听
  3. T-SQL查询:三值逻辑
  4. Entity Framework Batch Update
  5. EC读书笔记系列之14:条款26、27、28、29、30、31
  6. tomcat 设置session 时间
  7. 使用javascript把图片转成base64位编码,然后传送到服务端(ajax调用的接口基于drupa7)
  8. JavaScript中创建命名空间
  9. jmeter实例演示
  10. java实现发送短信