当前位置: 首页 > news >正文

企业网站建设的要求windows 网站开发

企业网站建设的要求,windows 网站开发,肥西做网站,html网页模板大全目录 1、什么是代理模式#xff1f; 2、静态代理 3、动态代理 3.1 JDK动态代理类 3.2 CGLIB动态代理类 4、JDK动态代理和CGLIB动态代理的区别#xff1f; 1、什么是代理模式#xff1f; 定义#xff1a; 代理模式就是为其他对象提供一种代理以控制这个对象的访问。在某…目录 1、什么是代理模式 2、静态代理 3、动态代理 3.1 JDK动态代理类 3.2 CGLIB动态代理类 4、JDK动态代理和CGLIB动态代理的区别 1、什么是代理模式 定义         代理模式就是为其他对象提供一种代理以控制这个对象的访问。在某些情况下一个对象不适合或者不能直接引用另一个对象而代理对象就可以在客户端和目标对象之间起到中介的作用。类似于租房租户和房东之间现在不直接沟通找了中介来联系那么中介就是代理这种模式就是代理模式。         代理模式分为静态代理和动态代理。 2、静态代理 在静态代理中我们对目标对象的每个方法的增强都是手动完成的非常不方便比如接口一旦增加新方法目标对象和代理对象都要进行修改同时也麻烦需要对于每个目标类都单独写一个代理类类似于房东有很多套房子每套房子都要找一个中介来代理因此实际场景中静态代理的使用非常少。 1从JVM的层面上讲静态代理是在编译的时候就将接口、实现类、代理类等都变成了一个个实际的class文件。 模拟租户和房东之间的租房业务 静态代理的使用步骤 1创建一个接口和实现类——相当于房主现在要出租房 //定义接口 public interface SellHouseService {void sell(); } 不过房主有很多套房子现在只想出租房子一 //实现接口具体的房东要出租房子 public class SellHouseOneService implements SellHouseService{Overridepublic void sell() {System.out.println(SellHouseService...);} } 2创建一个代理类也实现这个接口 ——房主将房子一出租的任务交给中介不然中介也没有权限去给租户看房子。 //创建代理类 public class StaticProxy implements SellHouseService{//将目标对象注入到代理类然后在代理类的对应方法调用目标类中的对应方法private final SellHouseService sellHouseService;public StaticProxy(SellHouseService sellService){this.sellHouseService sellService;}Overridepublic void sell() {System.out.println(before...);sellHouseService.sell();System.out.println(after...);} } 3主函数 public class Main {public static void main(String[] args) {//创建目标对象房东SellHouseService service new SellHouseOneService();//创建代理对象中介SellHouseService proxy new StaticProxy(service);proxy.sell();} } 当我租第二套房子第三套的时候也要找一个代理...非常麻烦。这个时候我们就使用动态代理了。 3、动态代理 相比于静态代理动态代理更加灵活我们不用再针对每个目标类都单独去创建一个代理类了。 小Tips 1动态代理主要有两种JDK动态代理和CGLIB动态代理机制。 2其中Spring AOP的实现就依赖了动态代理。 3从JVM角度讲动态代理是在运行的时候动态生成类字节码并加载到JVM中。 4在Java动态dialing机制中InvocationHander接口和Proxy类是核心。 3.1 JDK动态代理类 JDK动态代理类的使用步骤 1定义接口及实现类同静态代理 2自定义InvocationHandler并重写invoke方法在invoke方法中调用被代理类的方法并定义一些处理逻辑 //自定义InvokeHandler并重写invoke方法 public class JDKInvocationHandler implements InvocationHandler {//目标对象就是被代理对象private Object target;public JDKInvocationHandler(Object target){this.target target;}//代理对象要运行的方法传递的实参Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//增强方法前置处理//1、安全检查System.out.println(安全检查);//2、记录日志System.out.println(记录日志);//3.时间统计开始System.out.println(记录开始时间);//4、在invoke方法中会通过反射调用被代理类的方法Object retVal method.invoke(target,args);//5、时间统计结束System.out.println(记录结束时间);return retVal;} } 3创建一个代理类并使用。 public class Main {public static void main(String[] args) {//创建代理对象SellHouseService target new SellHouseOneService();//创建一个代理类通过被代理类、被代理实现的接口、方法调用处理器来创建SellHouseService proxy (SellHouseService) Proxy.newProxyInstance(target.getClass().getClassLoader(),new Class[]{SellHouseService.class},new JDKInvocationHandler(target));proxy.sell();} } 小Tips 问如何为Java对象创建一个代理对象         java.lang.reflect.Proxy类提供了为对象产生代理对象的方法 1Public static Object newProxyInstanceClassLoader loader,Class? [ ] interfacesInvocationHandler hnewProxyInstance作用是生成一个代理对象。返回值就是代理 2这个方法一共有三个参数loader类加载器用于加载代理对象interfaces被代理类实现的一些接口还有实现了InvocationHanldler接口的对象。 3JDK动态代理的问题只能代理实现了接口的类因此使用CGLIB动态代理来解决。 4通过Proxy 类的 newProxyInstance() 创建的代理对象在调用方法的时候实际会调用到实现InvocationHandler 接口的类的 invoke()方法。 你可以在 invoke() 方法中自定义处理逻辑比如在方法执行前后做什么事情。  3.2 CGLIB动态代理类 CGLIBCode Generation Library允许我们在运行的时候对字节码进行修改和动态生成。CGLIB允许我们通过继承的方式实现代理。CGLIB动态代理机制中MethodIntercepor接口和Enhancer类是核心。在Spring AOP的设计中如果目标对象实现了接口则默认采用JDK动态代理否则使用CGLIB动态代理。 CGLIB动态代理类的使用步骤 1添加依赖 dependencygroupIdcglib/groupIdartifactIdcglib/artifactIdversion3.3.0/version/dependency 2自定义MethodInterceptor并重写Intercept方法intercept用于拦截增强被代理类的方法和JDK动态代理中的Invoke方法类似 public interface MethodInterceptor extends Callback{// 拦截被代理类中的⽅法public Object intercept(Object obj, java.lang.reflect.Method method, Object[] args,MethodProxy proxy) throws Throwable; } public class CGLIBInterceptor implements MethodInterceptor {//被代理对象private Object target;public CGLIBInterceptor(Object target){this.target target;}Overridepublic Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {//1.安全检查System.out.println(安全检查);//2.记录⽇志System.out.println(记录⽇志);//3.时间统计开始System.out.println(记录开始时间);//通过cglib的代理⽅法调⽤Object retVal methodProxy.invoke(target, args);//4.时间统计结束System.out.println(记录结束时间);return retVal;} }3通过Enhancer类的create()创建代理类并使用。 public static void main(String[] args) {SellHouseService target new SellHouseOneService();SellHouseService proxy (SellHouseService) Enhancer.create(target.getClass(),new CGLIBInterceptor(target));proxy.sell();} 4、JDK动态代理和CGLIB动态代理的区别 1JDK 动态代理只能代理实现了接⼝的类或者直接代理接⼝⽽ CGLIB 可以代 理未实现任何接⼝的类。 2CGLIB 动态代理是通过⽣成⼀个被代理类的⼦类来拦截被代理类的⽅法调 ⽤因此不能代理声明为 final。 3性能: ⼤部分情况都是 JDK 动态代理更优秀随着 JDK 版本的升级这个优势更 加明显
http://www.hkea.cn/news/14328400/

相关文章:

  • 大型门户网站模板太原网页设计培训学校
  • 做外贸比较好用的网站wordpress 微信 主题
  • 做网站的准备什么旅游网站开发方案ppt
  • 徐州免费网站制作wordpress 后台添加菜单
  • cargo创建个人网站wordpress怎么做301重定向
  • 小程序怎么做微网站链接说说网站建设百度收录减少问题
  • 海尔网站推广策划方案绍兴公司注册
  • 网站初期缺点建设银行个人网上银行网页
  • 免费优化推广网站的软件线上销售渠道
  • 相城区建设网站叫别人做网站安全吗
  • 一般建设企业网站的费用如何做seo
  • 迅速百度网站自然排名本地网站建设
  • 杭州网站建设制作联系电话游戏网站代理
  • 企业制作网站有什么网站可以做
  • 网站模版建设工具如何给网站做备份
  • 专门做网站搜索优化的公司wordpress本地上传阿里元
  • 佛山市品牌网站建设价格找人帮忙注册app推广
  • 深圳网站建站公司网站建设的一般过程
  • 在线做数据图的网站有哪些大都会下载安装
  • 帮传销做网站违法吗word版免费个人简历模板
  • 导购网站怎么推广h5企业网站只做
  • 途牛旅行网网站建设江西网站制作的公司哪家好
  • 互联网 网站设计广州哪里能打九价疫苗
  • 网站开发模式有什么新产品如何快速推广市场
  • 聊城网站推广的公司办公室装修设计理念简短范文
  • 广州网站运营视频直播软件
  • 中国建设银行官网站黄金部王毅科技自主自强国家发展战略
  • 网站建设的步骤和要点百度关键词seo公司
  • 百盛联合建设集团网站比较有设计感的网站
  • 网站建设交接函推广普通话宣传周活动方案