动态代理与静态代理的代码区别 : 动态代理实现了代理类的创建,但是接口和代理对象还是需要(具体区别暂不赘述)
实现示例:
1. Marry接口
public interface Marry {
public void marry ( ) ;
}
2. 代理对象People
public class People implements Marry {
private String name;
public People ( ) { }
public People ( String name) {
this . name= name;
}
@Override
public void marry ( ) {
System . out. println ( name+ "好好的Marry" ) ;
}
}
3. 动态代理类MyProxy
- 类似静态代理,通过set方法或其他方法注入代理对象
- 自写get方法,以得到创建的代理类
- 重写invoke方法,类似代理类执行代理过程
public class MyProxy implements InvocationHandler {
public Object target;
public void setTarget ( Object target) {
this . target = target;
}
public Object getProxy ( ) {
return Proxy . newProxyInstance (
this . getClass ( ) . getClassLoader ( ) ,
target. getClass ( ) . getInterfaces ( ) ,
this
) ;
}
@Override
public Object invoke ( Object proxy, Method method, Object [ ] args) throws Throwable {
System . out. println ( method. getName ( ) + "代理开始" ) ;
Object result = method. invoke ( target, args) ;
System . out. println ( "返回了" + method. getReturnType ( ) + "类型的结果," + method. getName ( ) + "代理结束" ) ;
return result;
}
}
4. 测试代理
public class Test {
public static void main ( String [ ] args) {
MyProxy myProxy = new MyProxy ( ) ;
myProxy. setTarget ( new People ( "小明" ) ) ;
Marry proxy = ( Marry ) myProxy. getProxy ( ) ;
proxy. marry ( ) ;
}
}
5. 执行结果
marry代理开始
小明好好的Marry
返回了void类型的结果,marry代理结束