上代码:
// 定义主体类接口,提供接口
public interface IUser {
String find();
void save(String value);
}
// 实体类
public class UserImp implements IUser {
@Override
public void save(String value) {
System.out.println("主体类,保存");
}
@Override
public String find() {
return "value";
}
}
// 代理类
public class IUserProxy implements IUser{
IUser iUser ;
IUserProxy(IUser iUser) {
this.iUser =iUser;
}
@Override
public void save(String value) {
System.out.println("代理类,save方法,开始。。。。");
iUser.save(value);
System.out.println("代理类,save方法,结束。。。。");
}
@Override
public String find() {
return null;
}
}
代理主要功能:加强实现,扩展功能
二、动态代理:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactory {
private Object object;
public ProxyFactory(Object object) {
this.object = object;
}
public Object getProxyInstance () {
Object obj = Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
String methodName = method.getName();
if (methodName!=null) {
if ("save".equals(methodName)) {
System.out.println("动态代理类,save方法,开始调用。。。。。。");
result = method.invoke(object,args);
System.out.println("动态代理类,save方法,结束调用,。。。。。。");
}else {
result = method.invoke(object,args);
}
}
return result;
}
});
return obj;
}
}
根据反射,映射对应的object,根据methodName动态匹配,可以通过配置来实现,如spring中的xml配置,注解配置等