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

可以专做福特配件吗外贸网站crm系统的销售管理功能包括

可以专做福特配件吗外贸网站,crm系统的销售管理功能包括,wordpress注册qq邮箱配置,WordPress积分插件制作1.代理模式 定义#xff1a;代理模式就是代替对象具备真实对象的功能#xff0c;并代替真实对象完成相应的操作并且在不改变真实对象源代码的情况下扩展其功能#xff0c;在某些情况下#xff0c;⼀个对象不适合或者不能直接引⽤另⼀个对象#xff0c;⽽代理对象可以在客户…1.代理模式 定义代理模式就是代替对象具备真实对象的功能并代替真实对象完成相应的操作并且在不改变真实对象源代码的情况下扩展其功能在某些情况下⼀个对象不适合或者不能直接引⽤另⼀个对象⽽代理对象可以在客户端和⽬标对象之间起到中介的作⽤ 使用代理模式可以降低系统的耦合性扩展性好并且可以起到保护目标对象的作用 例如我们平时租房的过程,租房中介就相当于代理类 代理模式分为静态代理和动态代理 2.静态代理 静态代理实现步骤: 定义⼀个接⼝及其实现类目标类创建⼀个代理类同样实现这个接⼝(继承同一个接口的原因就是代理类需要拥有和目标类同样的方法这样才能代理)将⽬标对象注⼊进代理类然后在代理类的对应⽅法调⽤⽬标类中的对应⽅法。 public interface IRentHouse {void rent(); } public class RentHouse implements IRentHouse{Overridepublic void rent() {System.out.println(租户租房子);} } public class IntermediaryProxy implements IRentHouse{private IRentHouse iRentHouse;public IntermediaryProxy(IRentHouse iRentHouse) {this.iRentHouse iRentHouse;}Overridepublic void rent() {System.out.println(交中介费);iRentHouse.rent();System.out.println(租房子后中介负责维护管理);} }/*** 测试类*/ public class Test {public static void main(String[] args) {// 定义租房IRentHouse iRentHouse new RentHouse();// 定义中介IRentHouse proxy new IntermediaryProxy(iRentHouse);// 租房proxy.rent();} } 运行结果如下 静态代理有很多缺点实际应用场景非常少几乎不用 对目标对象的每个方法的增强都是手动完成的非常不灵活比如接口中一旦新增方法目标对象和代理对象都要修改且麻烦需要对每个目标类都单独写一个代理类 3.动态代理 相比于静态代理来说动态代理更加灵活不需要针对每个目标类都单独创建一个代理类也不需要我们必须实现接口 动态代理允许使用一种方法的单个类代理类为具有任意数量方法的任意类目标类的多个方法提供服务看到这句话是不是联想到动态代理的实现与Java反射机制密不可分 Java反射机制是在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意一个属性和方法这种动态获取的信息以及动态调用对象的方法的功能称之为Java语言的反射机制 从 JVM ⻆度来说动态代理是在运⾏时动态⽣成类字节码并加载到 JVM 中 的。说到动态代理不得不提的是Spring AOP它的实现依赖了动态代理代理类的两个作用 1.添加增强方法2.调用目标类 1.jdk动态代理接口代理 在 Java 动态代理机制中java.long.reflect包中的 InvocationHandler 接⼝和 Proxy 类是核⼼ 实际上就是在内存中生产一个对象该对象实现了指定的目标对象的所有接口代理对象和目标对象是兄弟关系 jdk自带动态代理技术需要使用一个静态方法来创建代理对象他需要目标对象必须实现接口生产的代理对象和目标对象都实现同一个接口 JDK 动态代理类使⽤步骤: 定义⼀个接⼝及其实现类⾃定义 InvocationHandler 并重写invoke⽅法在 invoke ⽅法中我们会调⽤ 原⽣⽅法被代理类的⽅法并⾃定义⼀些处理逻辑通过 Proxy.newProxyInstance(ClassLoader loader,Class?[] interfaces,InvocationHandler h) ⽅法创建代理对象 1.定义JDK动态代理类 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method;// JDK 动态代理类 public class JDKInvocationHandler implements InvocationHandler {//⽬标对象即就是被代理对象private Object target;public JDKInvocationHandler(Object target) {this.target target;}/**** param proxy 代理对象* param method 代理方法* param args 参数** return* throws Throwable*/Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 1234就是一些增强方法//1.安全检查System.out.println(安全检查);//2.记录⽇志System.out.println(记录⽇志);//3.时间统计开始System.out.println(记录开始时间);//通过反射调⽤被代理类的⽅法Object retVal method.invoke(target, args);//4.时间统计结束System.out.println(记录结束时间);return retVal;} } 2.创建⼀个代理对象并使用 public class Main {public static void main(String[] args) {// 代理对象PayService target new AliPayService();// 静态的是已经写好了的// 动态的创建⼀个代理类通过被代理类、被代理实现的接⼝、⽅法调⽤处理器来创建PayService proxy (PayService) Proxy.newProxyInstance(// 通过目标类的getClassLoadertarget.getClass().getClassLoader(),// 被代理类实现的一些接口new Class[]{PayService.class},// 实现了InvocationHandler接口的对象new JDKInvocationHandler(target));proxy.pay();}} Proxy 类中使⽤频率最⾼的⽅法是newProxyInstance() 这个⽅法主要⽤来⽣成⼀个代理对象 public static Object newProxyInstance(ClassLoader loader,Class?[] interfaces,InvocationHandler h)throws IllegalArgumentException{....}这个⽅法⼀共有 3 个参数 loader :类加载器⽤于加载代理对象。interfaces : 被代理类实现的⼀些接⼝h : 实现了 InvocationHandler 接⼝的对象 运行main方法 JDK 动态代理有⼀个最致命的问题是其只能代理实现了接⼝的类为了解决这个问题我们可以⽤ CGLIB 动态代理机制来避免 CGLIB(Code GenerationLibrary)是⼀个基于ASM的字节码⽣成库它允许我们在运⾏时对字节码进⾏修改和动态⽣成。CGLIB通过继承⽅式实现代理。很多知名的开源框架都使⽤到了CGLIB 例如 Spring 中的 AOP 模块中如果⽬标对象实现了接⼝则默认采⽤JDK 动态代理否则采⽤ CGLIB 动态代理。 在 CGLIB 动态代理机制中 MethodInterceptor 接⼝和 Enhancer 类是核⼼ 2.CGLIB 动态代理类使⽤步骤 定义⼀个类⾃定义 MethodInterceptor 并重写 intercept ⽅法intercept ⽤于拦截增强 被代理类的⽅法和 JDK 动态代理中的 invoke ⽅法类似通过 Enhancer 类的 create()创建代理类 1.添加依赖 和JDK 动态代理不同, CGLIB(Code Generation Library) 实际是属于⼀个开源项⽬如果你要使⽤它的话需要⼿动添加相关依赖 dependencygroupIdcglib/groupIdartifactIdcglib/artifactIdversion3.3.0/version /dependency2.⾃定义 MethodInterceptor⽅法拦截器 public class CGLIBInterceptor implements MethodInterceptor {//被代理对象private Object target;public CGLIBInterceptor(Object target){this.target target;}Overridepublic Object intercept(Object o, Method method, Object[] args, Method Proxy 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.创建代理类, 并使⽤ public static void main(String[] args) {PayService target new AliPayService();PayService proxy (PayService) Enhancer.create(target.getClass(),ne w CGLIBInterceptor(target));proxy.pay();}你需要⾃定义 MethodInterceptor 并重写 intercept ⽅法intercept ⽤于拦截增强被代理类的⽅法 public interface MethodInterceptor extends Callback{// 拦截被代理类中的⽅法public Object intercept(Object obj, java.lang.reflect.Method method, Ob ject[] args,MethodProxy proxy) throws Throwable; }obj : 被代理的对象需要增强的对象method : 被拦截的⽅法需要增强的⽅法args : ⽅法⼊参proxy : ⽤于调⽤原始⽅法 3.JDK 动态代理和 CGLIB 动态代理对⽐ JDK 动态代理只能代理实现了接⼝的类或者直接代理接⼝⽽ CGLIB 可以代理未实现任何接⼝的类CGLIB动态代理是通过⽣成⼀个被代理类的⼦类来拦截被代理类的⽅法调⽤因此不能代理声明为 final 性能: ⼤部分情况都是 JDK 动态代理更优秀随着 JDK 版本的升级这个优势更加明显 Spring代理选择 proxyTargetClass 为false, ⽬标实现了接⼝, ⽤jdk代理proxyTargetClass 为false, ⽬标未实现接⼝, ⽤cglib代理proxyTargetClass 为true, ⽤cglib代理 下篇见~
http://www.dnsts.com.cn/news/266316.html

相关文章:

  • 网站推广做多大尺寸php开源免费网站模板
  • 网上接网站项目网站非法字符过滤
  • 网站开发建设方案书网站规划的主要内容
  • 港口建设征收 申报网站中国的网站域名是什么意思
  • 网站数据库如何导入数据库文件软件下载网站制作
  • 建设营销型网站的步骤做网站的技术员
  • 怎么做qq刷赞网站直接翻译网页的软件
  • 中国空间站24小时直播入口青岛房产网上备案查询
  • 建筑人才网站做网站的怎么学
  • 为什么要注册中文域名官网seo
  • 网站推广是网站建设完成之后的长期工作。网站后台管理模板下载
  • 网站建设捌金手指下拉八网站开发费记什么会计科目
  • 网站广告弹出来代码网站左侧的导航是怎么做的
  • 武安城乡建设网站技术支持 英铭网站建设
  • 网站一般用什么免费字体宁波网站建设慕枫科技
  • 电子商务网站的后台管理系统北京网站设计联系电话
  • 深圳彩票网站开发人员惠州小程序开发
  • 网站视频打不开什么原因网站定制开发 广州
  • 重庆哪里可以学习网站建设和维护宁波网络公司招聘信息
  • 为什么网站找不到了引擎搜索网站
  • 网站搭建需要多少钱?网站建设用啥技术
  • 开源企业网站如何写app程序
  • 如何建设一个国外网站聊城企业做网站推广
  • 网站制作方案模板介绍湛江网站
  • 宁国新站seo大学生创业2月亏3万
  • 大型企业网站制作wordpress企业主题模板
  • 哪个网站做汽车分期展厅设计行业平台
  • 济南网站建设开发公司哪家好青岛网站公司
  • 短网址还原网站中国建筑考试网入口
  • 汕头建设网站html制作个人简历