vista

回顾※展望                     潜心技术&&不再搁浅

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  12 Posts :: 1 Stories :: 13 Comments :: 0 Trackbacks
这个知识点不多,但属于java的高级技术,相信熟悉SPRING的朋友对它一定不会陌生,今天花了点时间对java的动态代理进行了学习,感觉还可以,因为是结合spring来看的,所以练习的是面向接口的代理模式,但应该也是最常用的动态代理..,废话不多说,看例子:
package org.diego;

public interface Ip {
    
public void say();
}


实现类:
package org.diego;

public class P implements Ip{
    
public void say(){
        System.out.println(
"hello");
    }

}


代理类:

package org.diego;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

class TraceHandler implements InvocationHandler {
    
private Object target;

    
public TraceHandler(Object t) {
        target 
= t;
    }


    
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        
// TODO Auto-generated method stub
        if (method.getName().startsWith("say")) {
            System.out.println(
"hello,before method");
            Object result 
= method.invoke(target, args);
            System.out.println(
"World,after method");
            
return result;
        }

        
return null;
        
    }

}


测试类:
/*
 * @author diego.liu
 * @contact vista.lbw@gmail.com
 * @date 2006-11-7
 
*/

package org.diego;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class ProxyTest {

    
public static void main(String[] args) {
        P test 
= new P();
        InvocationHandler handler 
= new TraceHandler(test);
        Ip proxy 
= (Ip) Proxy.newProxyInstance(test.getClass().getClassLoader(), test.getClass().getInterfaces(),
                handler);
        proxy.say();
    }


}


已经测试可以运行,欢迎拍砖。。。
posted on 2006-11-07 18:14 Vista 阅读(1642) 评论(0)  编辑  收藏 所属分类: java基础

只有注册用户登录后才能发表评论。


网站导航: