JDK接口实现动态代理
public interface Rent {
public void massage();
}
public class Host implements Rent{
@Override
public void massage() {
System.out.println("房东要租房!");
}
}
public class ProxyCompant implements InvocationHandler{
private Object target;
public void setTarget(Rent 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 {
Object result = method.invoke(target, args);
return result;
}
}
public class Client {
public static void main(String[] args) {
Host host = new Host();
ProxyCompant pt = new ProxyCompant();
pt.setTarget(host);
Rent proxy = (Rent)pt.getProxy();
proxy.massage();
}
}
使用CGLIB实现动态代理
public class PersonService {
public PersonService() {
System.out.println("PersonService构造");
}
public void setPerson() {
System.out.println("PersonService:setPerson");
}
}
public class CglibProxyIntercepter implements MethodInterceptor {
@Override
public Object intercept(Object sub, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("执行前...");
Object object = methodProxy.invokeSuper(sub, objects);
System.out.println("执行后...");
return object;
}
}
public class Test {
public static void main(String[] args) {
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\code");
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(PersonService.class);
enhancer.setCallback(new CglibProxyIntercepter());
PersonService proxy= (PersonService)enhancer.create();
proxy.setPerson();
}
}