本帖最后由 白堇翎 于 2013-8-5 22:31 编辑
楼上已经把概念讲的很清楚了,我就来个封装好的代理类吧,可能具体的代码能帮助你更好的理解什么是"动态代理类"- package ProxyClass;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.util.ArrayList;
- import java.util.Collection;
- /*
- * 代理类练习
- * */
- public class ProxyTest {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- pro pro = new clspro();
- Test3Proxy T3P = new Test3Proxy();
- ArrayList al = new ArrayList();
- Collection coll = (Collection)T3P.proxy(al, pro);
- //随便添加点东西试试我的代理类
- coll.add(123);
- coll.add(123);
- coll.add(123);
- coll.add(123);
- coll.add(123);
-
- }
- }
- //一个封装好的代理类,直接往里传你自己想要的代理的类,增加的功能即可,前提是你的类必须实现pro接口
- class Test3Proxy{
- public Object proxy(final Object targent,final pro pro){
- Object tar = Proxy.newProxyInstance(
- targent.getClass().getClassLoader(),
- targent.getClass().getInterfaces(),
- new InvocationHandler() {
-
- @Override
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- // TODO Auto-generated method stub
- pro.before();
- Object obj = method.invoke(targent, args);
- pro.after();
- return obj;
- }
- });
- return tar;
- }
- }
- //接口,用于声明要添加的功能
- interface pro{
- void before();
- void after();
- }
- //随便写一个实现pro接口的类,随便添加点功能
- class clspro implements pro{
- long start;
- long end;
- @Override
- public void before() {
- // TODO Auto-generated method stub
- start = System.currentTimeMillis();
- }
- @Override
- public void after() {
- // TODO Auto-generated method stub
- end =System.currentTimeMillis();
- System.out.println(end-start);
- }
-
- }
复制代码 |