北京做网站好的网站建设公司,手机端怎么网站建设,进销存管理软件哪个好,如何提高网站排名代理分为两种#xff1a;
1.静态代理
2.动态代理 动态代理又分为两种#xff1a;jdk 实现 #xff1b;Cglib 实现
3.Java中如何实现代理机制(JDK、CGLIB)
JDK动态代理#xff1a;代理类和目标类实现了共同的接口#xff0c;用到InvocationHandler接口。CGLIB动态代理…代理分为两种
1.静态代理
2.动态代理 动态代理又分为两种jdk 实现 Cglib 实现
3.Java中如何实现代理机制(JDK、CGLIB)
JDK动态代理代理类和目标类实现了共同的接口用到InvocationHandler接口。CGLIB动态代理代理类是目标类的子类用到MethodInterceptor接口。
注意
使用版本
首先介绍jdk 实现动态代理
第一步建立接口
package com.asiainfo.proxydemo;
public interface BookFacade { public void addBook(); } 第二步实现接口
package com.asiainfo.proxydemo;
import java.io.Serializable;
public class BookFacadeImpl implements BookFacade, Serializable { public void addBook() { // TODO Auto-generated method stub System.out.println(增加图书方法。。。); }
} 第三步建立代理类 package com.asiainfo.proxydemo; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class BookFacadeProxy implements InvocationHandler { private Object target; public Object bind(Object target){ this.targettarget; return Proxy.newProxyInstance(target.getClass().getClassLoader(), (Class?[]) target.getClass().getGenericInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object resultnull; System.out.println(事物开始执行); method.invoke(target, args); System.out.println(事情结束); return null; } //代码测试 public static void main(String[] args) { BookFacade target new BookFacadeImpl(); BookFacade bookFacadeProxy (BookFacade) new BookFacadeProxy().bind(target); bookFacadeProxy.addBook(); } } 其次是Cglib 实现
第一步:
package com.asiainfo.proxydemo;
public class BookFacadeCglib { public void addBook(){ System.out.println(addBook); } } 第二步cglib 建立测试类
package com.asiainfo.proxydemo;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy;
public class BookFacadeProxyCglib implements MethodInterceptor { private Object target; public Object getInstance(Object target){ this.targettarget; Enhancer enhancernew Enhancer(); enhancer.setSuperclass(this.target.getClass()); //回调方法 //enhancer.setCallbackType(this.target.getClass()); enhancer.setCallback(this); //创建代理对象 return enhancer.create(); } public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { // TODO Auto-generated method stub System.out.println(before run); Object returnvalueproxy.invokeSuper(obj, args); System.out.println(after run); return null; } //cglib代码测试 public static void main(String[] args) { BookFacadeCglib target new BookFacadeCglib(); BookFacadeCglib bookFacadeCglib (BookFacadeCglib) new BookFacadeProxyCglib().getInstance(target); bookFacadeCglib.addBook(); }
} 参考http://lrd.ele.me/2017/01/09/dynamic_proxy/ https://blog.csdn.net/einstein10147/article/details/77040110