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

电子商务网站建设可用性五个方面企业网站建设的要求

电子商务网站建设可用性五个方面,企业网站建设的要求,拓客最有效方案,美食网站开发与研究 论文目录 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.dnsts.com.cn/news/202106.html

相关文章:

  • 有什么教做维c甜品的网站图片网站php源码
  • 做网站前段可以考什么证书网站建设基础
  • 桂城网站建设网站页面报价
  • 个人可以做外贸网站吗wordpress始终无法登录
  • 做任务挣钱的网站app红色餐饮网站源码
  • wordpress 漫画站大气物流网站模块
  • 网站营销怎么做个人品牌建设
  • 网站建设公司市场策划方案自己创业开网店需要什么
  • 营销型网站建设试卷html制作新闻信息展示页面
  • 如何建设自己的网站 知乎多语言多风格网站方案
  • 那些网站建设的好网上购物的网站有哪些
  • 郴州竞价网站建设方案中国建设银行北京天竺支行网站
  • wordpress新站都该设置些什么易名网
  • 大理北京网站建设wordpress 响应式企业主题
  • 上海外贸网站开发it网站开发
  • wordpress怎么放视频做seo如何赚钱
  • 个人网站的作用学生个人网页制作html报告
  • 建设网站需要了解些什么问题国外手机模板网站推荐
  • 网页创建网站网站开发智能化方向
  • 网站建设的主题什么比较好昆明网站建设博滇
  • 卖汽车的网站怎么做的建立网站的流程多少钱
  • 微信开放平台与个人网站怎么最好的网络营销软件
  • 前程无忧网广州网站建设分类岗位开公司要多少钱
  • 国内做视频的网站有哪些阳江网站建设推广
  • 网站建设技术员招聘网站备案变更主体电话
  • 不让在建设门户网站wordpress老版
  • 北京的餐饮网站建设做网站一定需要自己买主机吗
  • 建设网站的请示吉林省建设工程造价信息网
  • 什么软件可以自主建设网站怎么做网站站内搜索
  • 做网站网站判刑app界面设计常用的布局具有哪些