Java动态代理机制——JDK
2014-05-07 22:07
225 查看
动态代理机制是Spring AOP编程的原理基础。
JDK的动态代理机制有个限制就是它只能代理实现了一个或多个接口的类。如PersonImpl得实现Person接口,才能用JDK动态代理机制。
定义一个Person的接口:
定义接口Person的实现类,类的实例就是我们要代理的对象(被代理的对象)
定义代理处理类。其中主要有以下几点。
1.实现InvocationHandler接口。
2.定义被代理的对象;
3.定义一个方法,将被代理的对象和处理器的实例(this)关联;
4.调用被代理对象的方法。
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(); } }
相关文章推荐
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java 动态代理机制:JDK和CGLib
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK动态代理与CGLIB动态代理区别)
- java动态代理模式Proxy之JDK动态代理机制
- java_IO,反射机制,jdk动态代理
- Java 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- 【转载】Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- 深入理解JAVA JDK动态代理机制
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)