转载java动态署理实例
转载java动态代理实例
1、创建接口:
2、实现接口:
3、实现InvocationHandler接口:
4、测试:
比较好的参考资料:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/
1、创建接口:
package cn.com.gan.Proxy; public interface Person { String getName(); String getGender(); void setName(String name); void setGender(String gender); void setRate(int rate); int getRate(); }
2、实现接口:
package cn.com.gan.Proxy; public class Chinese implements Person { String name; String gender; String interests; int rate; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getInterests() { return interests; } @Override public int getRate() { return rate; } @Override public void setRate(int rate) { this.rate=rate; } }
3、实现InvocationHandler接口:
package cn.com.gan.Proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class ChineseHander implements InvocationHandler { Object object=null; public ChineseHander(Object object){ this.object=object; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result=null; if(!method.getName().equals("setRate")) result=method.invoke(object, args); else System.out.println("不能够设置setRate"); return result; } private void doAfter() { System.out.println("do before hello"); } private void doBefore() { System.out.println("do after hello"); } }
4、测试:
package cn.com.gan.Proxy; import java.lang.reflect.Proxy; public class HelloProxyTest { /** * @param args */ public static void main(String[] args) { Person chinese = new Chinese(); ChineseHander chd = new ChineseHander(chinese); Person chineseProxy = (Person) Proxy.newProxyInstance(chinese .getClass().getClassLoader(), chinese.getClass() .getInterfaces(), chd); chineseProxy.setName("panda"); System.out.println(chineseProxy.getName()); chineseProxy.setRate(1); System.out.println(Proxy.isProxyClass(chineseProxy.getClass())); } }
比较好的参考资料:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/