十、java编程思想中的动态代理实现
2017-03-10 10:45
375 查看
一、java编程思想反射章节的动态代理实现代码展示
二、结果展示
package com.lattice.dtagency; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface Person{ void doSomeThing(); void doSomeThingElse(String arg); } class Peter implements Person{ @Override public void doSomeThing() { System.out.println("Peter likes fishing!"); } @Override public void doSomeThingElse(String arg) { System.out.println("Peter else likes swimming!"+arg); } } class Merry implements Person{ @Override public void doSomeThing() { System.out.println("Merry likes dancing!"); } @Override public void doSomeThingElse(String arg) { System.out.println("Merry else likes watching movies!"+arg); } } /** * 静态代理类 **/ class Lucy implements Person{ private Person person; public Lucy(Person person){ this.person=person; } public void getPerson(Person person){ this.person=person; } @Override public void doSomeThing() { this.person.doSomeThing(); } @Override public void doSomeThingElse(String arg) { this.person.doSomeThingElse(arg); } } /* * 动态代理类 */ class Maria implements InvocationHandler{ private Object person; public Maria(Object person){ this.person=person; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("\n_____person\t:"+person.getClass()+ "\nmethod:"+method+"\targs"+args); if(args!=null){ for(Object arg:args){ System.out.println("+++++++"+arg); } } return method.invoke(person, args); } } public class Afgency { public static void doWork(Person person){ person.doSomeThing(); System.out.println("******************"); person.doSomeThingElse("---------------------"); } public static void main(String [] args){ //doWork(new Lucy(new Peter())); //动态代理对象创建 Person person=(Person)Proxy.newProxyInstance(Person.class.getClassLoader() , new Class[]{Person.class}, new Maria(new Peter())); doWork(person); } }
二、结果展示
_____person :class com.lattice.dtagency.Peter method:public abstract void com.lattice.dtagency.Person.doSomeThing() argsnull Peter likes fishing! ****************** _____person :class com.lattice.dtagency.Peter method:public abstract void com.lattice.dtagency.Person.doSomeThingElse(java.lang.String) args[Ljava.lang.Object;@1a3a2a52 +++++++--------------------- Peter else likes swimming!---------------------
相关文章推荐
- Java 编程思想(四)动态代理
- JAVA中的动态代理和AOP编程思想
- 【JavaWeb-14】代理Proxy、动态代理、AOP编程思想、注解、元注解、类加载器
- 使用JAVA中的动态代理实现数据库连接池
- 用Java动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- Java动态代理实现
- AOP初学者第一步:用Java动态代理实现AOP
- 使用JAVA中的动态代理实现数据库连接池
- Java动态代理实现AOP
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- Java动态代理实现AOP
- 使用Java动态代理实现AOP
- 设计模式:用Java动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- 使用JAVA中的动态代理实现数据库连接池
- Java动态代理实现
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- AOP系列之三:用Java动态代理实现AOP