动态代理的原理和静态代理参不多,不同在于静态实现的是一个借口,而动态实现的是你想要实现的接口(也就是可以实现所有接口)
静态代理地址,可以看看,再来看动态代理:http://blog.youkuaiyun.com/javastudyr/article/details/16811995
package
fstest;
import
java.lang.reflect.InvocationHandler;
import
java.lang.reflect.Method;
import
java.lang.reflect.Proxy;
public
class
MyInvocationHander
implements
InvocationHandler{
//如果要完成动态代理,就要实现InvocationHandler接口
private
Object
obj
;
//真实主题
public
Object bind(Object obj){
//绑定真实主题
this
.
obj
=obj;
return
Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),
this
);
//取得代理对对象
}
public
Object invoke(Object proxy, Method method, Object[] args)
throws
Throwable {
//动态调用方法
Object temp=method.invoke(
this
.
obj
, args);
//调用方法,传入真实主题和参数
return
temp;
}
}
public
interface
Subject {
public
String say(String name,
int
age);
}
public
class
RealSubject
implements
Subject{
public
String say(String name,
int
age) {
return
"名字"
+name+
"年龄"
+age;
}
}
package
fstest;
public
class
DynaProxyDemo {
public
static
void
main(String[] args) {
MyInvocationHander hander=
new
MyInvocationHander();
//实例化代理类
RealSubject real=
new
RealSubject ();
Subject sub=(Subject)hander.bind(real);
//绑定对象
String str=sub.say(
"like"
, 30);
System.
out
.println(str);
}
}
结果:
名字like年龄30