Java 动态代理详解

时间:2023-03-09 22:03:45
Java 动态代理详解
package com.at221;

//代理设计模式:

interface ClothFactory{
void product();
} class NikeFactory implements ClothFactory{//被代理类: @Override
public void product() {
System.out.println("Nike服装很可靠");
} } class ProxyFactory implements ClothFactory{//代理类: private NikeFactory nf; public ProxyFactory(NikeFactory nf){
this.nf = nf;
}
@Override
public void product() {
this.nf.product();
} } public class TestProxy {
public static void main(String[] args) {
NikeFactory nf = new NikeFactory();
ProxyFactory pf = new ProxyFactory(nf);
pf.product();
}
}

下面是利用反射机制进行实现的动态代理:

package com.at221;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; interface Subject{
void show();
} class RealSubject implements Subject{ @Override
public void show() {
System.out.println("zhaoning,i love you!!!");
} } class ProxySubject implements InvocationHandler{
Object obj;
public Object blind(Object obj){
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), this);
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object returnVal = method.invoke(obj, args);
return returnVal;
} } public class TestProxy1{
public static void main(String[] args) {
RealSubject rs = new RealSubject();
ProxySubject ps = new ProxySubject();
Subject rss = (Subject)ps.blind(rs);
rss.show();
}
}