java反射机制初探

最近再看书时,书中使用了java的动态代理机制,随即在网上搜了些文章看了一下,既然有动态代理那就有静态代理,所谓静态代理,就是在你些的代理类中需要使用到具体的被代理类。而所谓动态代理,则不需要在代理类中使用到被代理类,根本不知道起要代理那个类。在jdk1.3后java加入了动态代理功能的api,动态代理主要用在面向接口编程上,业务逻辑的实现类必须实现某业务接口,通过使用动态代理,我们可以在代理类中拦截器功能. java的动态代理功能是通过实现java.lang.reflect.InvocationHandler接口来实现的。实现类必须实现接口中定义的调用方法。下面是一段实现动态代理的代码。[@more@]

最近再看书时,书中使用了java的动态代理机制,随即在网上搜了些文章看了一下,既然有动态代理那就有静态代理,所谓静态代理,就是在你些的代理类中需要使用到具体的被代理类。而所谓动态代理,则不需要在代理类中使用到被代理类,根本不知道起要代理那个类。在jdk1.3后java加入了动态代理功能的api,动态代理主要用在面向接口编程上,业务逻辑的实现类必须实现某业务接口,通过使用动态代理,我们可以在代理类中拦截器功能. java的动态代理功能是通过实现数组;InvocationHandler接口来实现的。实现类必须实现接口中定义的调用方法。下面是一段实现动态代理的代码。

包com.spring;

进口java.lang.reflect.InvocationHandler;
进口java.lang.reflect.Method;
进口java.lang.reflect.Proxy;
导入之后。*;

/* *
*此类用于实现动态代理
* @author保罗
*
*/

公共类LogHandler实现InvocationHandler {

私人日志记录器=Logger.getLogger (this.getClass () . getname ());

私人委托对象;

//绑定被代理对象,返回被代理对象所实现的接口
公共对象绑定(对象代表){
this.delegate=委托;
返回Proxy.newProxyInstance (delegate.getClass () .getClassLoader (),
delegate.getClass () .getInterfaces ());
}

公共对象调用(对象代理、方法方法,对象[]args)
{抛出Throwable
对象结果=零;
尝试{
日志(“method1”+方法),
=结果的方法。调用(委托,args);
logger.log(水平。信息,“方法结束”+方法);
}捕捉(异常e) {
日志(e.toString ());
}

返回结果;
}

私人空间日志(字符串消息){
logger.log(水平。信息,消息);
}

}

一下是定义业务逻辑方法的

包com.spring;

公共接口IHello {
公共空你好(字符串名称);
}

一下是接口实现类,即业务逻辑实现类

包com.spring;

/* *
*此类用于实现业务逻辑
* @author管理员
* *
/
公共类HelloSpeaker实现IHello {
/* *
*实现接口方法
* @return空白
*/
公共空你好(字符串名称){
system . out。println(“你好,”+名字),

}

}

一下是用于测试的类包com.spring

,

公共类ProxyDemo {

/* *
* @param args
*/
公共静态void main (String [] args) {
//HelloProxy代理=new HelloProxy(新HelloSpeaker ());
//proxy.hello(“保罗”);
LogHandler LogHandler=new LogHandler ();
IHello HelloProxy=(IHello) LogHandler。绑定(新HelloSpeaker());//绑定代理对象
helloProxy.hello(“保罗”);//该句执行时会调用调用方法

}

}

java反射机制初探