标签:str 执行 静态 运行时 text cer ide factor val
//接口 public interface ISing){ public void msg(); } //目标类 public class Sing implements ISing{ public void msg(){ System.out.println("我在唱歌..."); } } //代理类 public class SingProxy implements ISing{ private Sing sing; public SingProxy( Sing s){ this.sing=s; } public void msg(){ //此处为额外添加的功能... this.sing.msg(); //此处为额外添加的功能... } } //主类 public class Main{ public static void main(String[] args){ //目标对象 ISing sing=new Sing(); //代理对象 SingProxy singProxy=new SingProxy(sing); //本质是执行目标对象的方法 singProxy.msg(); } }
//代码写法固定 public class Test{ public static void main(String[] args) { Sing target = new Sing(); ISing singProxy = (ISinger) Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("此处为额外实现的功能..."); //执行目标对象方法 Object returnValue = method.invoke(target, args); System.out.println("此处为额外实现的功能..."); return returnValue; } }); //调用后的本质是执行目标的msg方法 singProxy.msg(); }
//目标类(没有接口) public class Sing{ public void msg(){ System.out.println("我在唱歌..."); } } //Cglib工厂类 public class ProxyFactory implements MethodInterceptor{ // 维护目标对象 private Object target; public ProxyFactory(Object target) { this.target = target; } // 给目标对象创建一个子类对象(子类代理对象,子类做代理类) public Object getProxyInstance(){ //1.工具类 Enhancer en = new Enhancer(); //2.设置父类 en.setSuperclass(target.getClass()); //3.设置回调函数 en.setCallback(this); //4.创建目标类的子类对象(子类代理对象) return en.create(); } //代码写法固定 @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("此处为额外实现的功能..."); //执行目标对象的方法 Object returnValue = method.invoke(target, args); System.out.println("此处为额外实现的功能..."); return returnValue; } } //主类 public class Main{ public static void main(String[] args){ //目标对象,没有接口 Sing target = new Sing(); //代理对象 Sing proxy = (Sing)new ProxyFactory(target).getProxyInstance(); proxy.msg();//执行子类代理对象的方法 } }
标签:str 执行 静态 运行时 text cer ide factor val
原文地址:https://www.cnblogs.com/afei1759/p/11108466.html