静态代理
步骤一:创建抽象主题(接口)
public interface Subject { /** * 抽象主题 */ public void doSome(); }
步骤二:真实业务代码
public class RealSubject implements Subject { /** * 真实业务代码 */ @Override public void doSome() { System.out.println("真实业务"); } }
步骤三:测试
public class ProxySubject implements Subject {
private Subject su=new RealSubject();
@Override
public void doSome() {
System.out.println("前");
su.doSome();
System.out.println("后");
}
}
JDK代理
步骤一:创建抽象主题(接口)
public interface Subject {
/**
* 抽象主题
*/
public void doSome();
}
步骤二:真实业务代码
public class RealSubject implements Subject {
/**
* 真实业务代码
*/
@Override
public void doSome() {
System.out.println("真实业务");
}
}
步骤三:测试
public class classsubject { public static void main(String[] args) { //创建一个静态原始对象 final Subject subject=new RealSubject(); Subject subjectProxy=(Subject) Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), new InvocationHandler() { /** *弥明内部类 * * @param proxy 代理对象 * @param method 目标代理方法 * @param args 目标代理方法的参数 * @return * @throws Throwable */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("嘿嘿,我在前"); Object invoke= method.invoke(subject,args); System.out.println("嘿嘿,我在后"); return invoke; } }); subjectProxy.doSome(); System.out.println(subject); System.out.println(subjectProxy ); } }
CGLIB代理
步骤一:代码层
public class Cglib { public void Some(){ System.out.println("代码"); } }
步骤二:测试
public class ServiceCglib { public static void main(String[] args) { //步骤一:目标对象 final Cglib cglib=new Cglib(); //步骤二:生成代理 Enhancer enhancer=new Enhancer(); //步骤三:指定需要代理的目标对象木模板 enhancer.setSuperclass(cglib.getClass()); //步骤四:实现增强的处理操作 enhancer.setCallback(new MethodInterceptor() { /** * * @param o 目标对象 * @param method 目标方法 * @param objects 目标方法的参数 * @param methodProxy 代理目标对象的方法 * @return * @throws Throwable */ @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("我在前"); Object invoke = methodProxy.invoke(cglib, objects); System.out.println("我在后"); return invoke; } }); //最后一步:创建代理 Cglib o = (Cglib)enhancer.create(); o.Some(); } }