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

类似AG网站建设网络营销案例具体分析

类似AG网站建设,网络营销案例具体分析,北京响应式网站建设费用,产品推广宣传方案文章目录1.代理模式2. 静态代理3. 动态代理3.1 JDK动态代理3.2 CGLIB动态代理1.代理模式 代理模式主要有两种: 静态代理模式 动态代理模式 2. 静态代理 有这样一个业务:订单的生成,修改,查看详情。实现如下 package com.sdnu.…

文章目录

  • 1.代理模式
  • 2. 静态代理
  • 3. 动态代理
    • 3.1 JDK动态代理
    • 3.2 CGLIB动态代理

1.代理模式

代理模式主要有两种:
静态代理模式
动态代理模式

2. 静态代理

有这样一个业务:订单的生成,修改,查看详情。实现如下

package com.sdnu.proxy.service;/*** 订单业务接口*/
public interface OrderService {void generate();void modify();void detail();
}
package com.sdnu.proxy.service;public class OrderServiceImpl implements OrderService{@Overridepublic void generate() {//模拟生成订单的耗时try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("订单已生产");}@Overridepublic void modify() {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("订单已修改");}@Overridepublic void detail() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("查看订单详情");}
}

测试

package com.sdnu.proxy.client;import com.sdnu.proxy.service.OrderService;
import com.sdnu.proxy.service.OrderServiceImpl;public class Test {public static void main(String[] args) {OrderService orderService = new OrderServiceImpl();orderService.generate();orderService.modify();orderService.detail();}
}

过了一段时间,有一个新的业务,我们需要统计订单的生成总时间,于是我们有如下的解决方案:

方案一:采用硬编码的方式,在每一个业务接口中的每一个业务方法直接写一个统计时间。
这种方案的缺点:(1)违背OCP原则
(2)代码没有得到复用

方案二:编写业务的子类,让子类继承原来的业务类,对每个业务方法进行重写。
这种方案的缺点:(1)虽然没有违背OCP原则,但是由于采用继承方式会导致代码的耦合度变高。
(2)代码没有得到复用

方案三:静态代理

代理对象

package com.sdnu.proxy.service;//代理对象
public class OrderServiceProxy implements OrderService{//将目标对象作为代理对象的一个属性,这种关系叫做关联关系,比继承关系耦合度低private OrderService target;public OrderServiceProxy(OrderService target) {this.target = target;}@Overridepublic void generate() {//代理方法long begin = System.currentTimeMillis();target.generate();long end = System.currentTimeMillis();System.out.println("耗时" + (end - begin) + "毫秒");}@Overridepublic void modify() {//代理方法long begin = System.currentTimeMillis();target.modify();long end = System.currentTimeMillis();System.out.println("耗时" + (end - begin) + "毫秒");}@Overridepublic void detail() {//代理方法long begin = System.currentTimeMillis();target.detail();long end = System.currentTimeMillis();System.out.println("耗时" + (end - begin) + "毫秒");}
}

测试

package com.sdnu.proxy.client;import com.sdnu.proxy.service.OrderService;
import com.sdnu.proxy.service.OrderServiceImpl;
import com.sdnu.proxy.service.OrderServiceProxy;public class Test {public static void main(String[] args) {OrderService orderService = new OrderServiceImpl();OrderServiceProxy orderServiceProxy = new OrderServiceProxy(orderService);orderServiceProxy.generate();orderServiceProxy.modify();orderServiceProxy.detail();}
}

这种静态代理符合OCP开闭原则,同时采用的是关联关系,所以程序的耦合度较低。
缺点:类爆炸问题。

3. 动态代理

在程序运行阶段,在内存中动态生成代理类,被称为动态代理,目的是为了减少代理类的数量。解决代码复用的问题。

常见的动态代理:

  • JDK动态代理
  • CGLIB动态代理
  • javassit动态代理

3.1 JDK动态代理

测试程序Test

package com.sdnu.proxy.client;import com.sdnu.proxy.service.OrderService;
import com.sdnu.proxy.service.OrderServiceImpl;
import com.sdnu.proxy.service.TimerInvocationHandler;import java.lang.reflect.Proxy;public class Client {public static void main(String[] args) {//创建目标对象OrderService target = new OrderServiceImpl();//创建代理对象OrderService orderServiceProxy = (OrderService) Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),new TimerInvocationHandler(target));//调用代理对象的代理方法orderServiceProxy.generate();orderServiceProxy.modify();orderServiceProxy.detail();}
}

代码OrderService orderServiceProxy = Proxy.newProxyInstance(类加载器, 接口类型, 调用处理器);做了两件事
● 第一件事:在内存中生成了代理类的字节码
● 第二件事:创建代理对象

参数:

类加载器:在内存中生成了字节码,要想执行这个字节码,也是需要先把这个字节码加载到内存当中的。所以要指定使用哪个类加载器加载。

接口类型:代理类和目标类实现相同的接口,所以要通过这个参数告诉JDK动态代理生成的类要实现哪些接口。

调用的处理器:这是一个JDK动态代理规定的接口,接口全名:java.lang.reflect.InvocationHandler。这是一个回调接口,也就是说调用这个接口中方法的程序已经写好了,就差这个接口的实现类了。


代理类
package com.sdnu.proxy.service;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class TimerInvocationHandler implements InvocationHandler {private Object target;public TimerInvocationHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//目标执行之前的增强long begin = System.currentTimeMillis();//反射机制调用目标对象上的目标方法Object retValue = method.invoke(target, args);//目标执行之后的增强long end = System.currentTimeMillis();System.out.println("耗时" + (end - begin) + "毫秒");return retValue;}
}

invoke方法有三个参数

  • Object proxy。代理对象。计这个参数只是为了后期的方便,如果想在invoke方法中使用代理对象的话,尽管通过这个参数来使用
  • Method method。目标方法。
  • Object[] args。目标方法调用时要传的参数。

3.2 CGLIB动态代理

CGLIB既可以代理接口,又可以代理类。底层采用继承的方式实现。所以被代理的目标类不能使用final修饰。

引入依赖:

<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>
</dependency>

文章转载自:
http://cutification.bqyb.cn
http://psig.bqyb.cn
http://valse.bqyb.cn
http://gynarchy.bqyb.cn
http://enteric.bqyb.cn
http://isoagglutinin.bqyb.cn
http://warfront.bqyb.cn
http://blastosphere.bqyb.cn
http://luckily.bqyb.cn
http://grivet.bqyb.cn
http://mesne.bqyb.cn
http://unscrupulously.bqyb.cn
http://aglimmer.bqyb.cn
http://glout.bqyb.cn
http://benthamism.bqyb.cn
http://teller.bqyb.cn
http://trothless.bqyb.cn
http://notehead.bqyb.cn
http://simmer.bqyb.cn
http://everywhen.bqyb.cn
http://garibaldist.bqyb.cn
http://cyclopedist.bqyb.cn
http://attunement.bqyb.cn
http://cacanny.bqyb.cn
http://undisciplined.bqyb.cn
http://foreworn.bqyb.cn
http://westphalia.bqyb.cn
http://pavlovism.bqyb.cn
http://bitcasting.bqyb.cn
http://jute.bqyb.cn
http://cirriped.bqyb.cn
http://tridigitate.bqyb.cn
http://teletype.bqyb.cn
http://jugful.bqyb.cn
http://individualism.bqyb.cn
http://outlast.bqyb.cn
http://talus.bqyb.cn
http://grasping.bqyb.cn
http://f2f.bqyb.cn
http://neoorthodox.bqyb.cn
http://crossbuttock.bqyb.cn
http://slosh.bqyb.cn
http://polygynist.bqyb.cn
http://chez.bqyb.cn
http://vulnerable.bqyb.cn
http://crofting.bqyb.cn
http://distributing.bqyb.cn
http://scute.bqyb.cn
http://minifestival.bqyb.cn
http://scupseat.bqyb.cn
http://instantiate.bqyb.cn
http://duopsony.bqyb.cn
http://rho.bqyb.cn
http://kitchenmaid.bqyb.cn
http://bullet.bqyb.cn
http://glycan.bqyb.cn
http://interstratify.bqyb.cn
http://humorlessly.bqyb.cn
http://smirnoff.bqyb.cn
http://nacrous.bqyb.cn
http://conscribe.bqyb.cn
http://habitacle.bqyb.cn
http://neophron.bqyb.cn
http://manichaeus.bqyb.cn
http://patroclinal.bqyb.cn
http://lochia.bqyb.cn
http://kurdish.bqyb.cn
http://pacifier.bqyb.cn
http://haji.bqyb.cn
http://vat.bqyb.cn
http://amoebiasis.bqyb.cn
http://euphemism.bqyb.cn
http://mesencephalon.bqyb.cn
http://estipulate.bqyb.cn
http://dominical.bqyb.cn
http://trader.bqyb.cn
http://geriatric.bqyb.cn
http://mattrass.bqyb.cn
http://gruesome.bqyb.cn
http://mef.bqyb.cn
http://aerotaxis.bqyb.cn
http://toecap.bqyb.cn
http://appraisingly.bqyb.cn
http://financier.bqyb.cn
http://rime.bqyb.cn
http://buildable.bqyb.cn
http://diplomatic.bqyb.cn
http://firebill.bqyb.cn
http://rickettsialpox.bqyb.cn
http://waywardness.bqyb.cn
http://mongoloid.bqyb.cn
http://unescapable.bqyb.cn
http://revilement.bqyb.cn
http://abortionism.bqyb.cn
http://felicity.bqyb.cn
http://ascetic.bqyb.cn
http://carioca.bqyb.cn
http://broomball.bqyb.cn
http://pul.bqyb.cn
http://fussy.bqyb.cn
http://www.15wanjia.com/news/59294.html

相关文章:

  • 免费门户网站模板google chrome浏览器
  • 盘古网络建站每日一则小新闻
  • 顺德做网站个人网络销售平台
  • 视频解析接口网站怎么做全网营销培训
  • 我有产品想找平台卖优化教程网官网
  • 网站建设公司苏州seo入门教学
  • 高端网站设计品牌免费建站哪个最好
  • WordPress源码交易源码大连seo外包平台
  • 最优的锦州网站建设网址怎么创建
  • 在线做图工具seo包括什么
  • 网站需要公安局备案吗安徽网络关键词优化
  • 郑州网站建设七彩科技百度搜索引擎关键词优化
  • 网站建设的四个步骤百度人工服务热线
  • 人像摄影网站有哪些企业网页设计公司
  • 阿里巴巴网站分类板块做全屏家庭优化大师下载
  • 营销型企业网站建设方案网站优化推广价格
  • 织梦网站怎样做seo广州百度快速优化排名
  • 网站建设后台管理便捷微软bing搜索引擎
  • 手机网站 免费建站关键词优化软件
  • 佛山选择免费网站优化seoaoo
  • 智慧门店管理系统app优化关键词排名软件
  • 城市建设网站aqq百度公司注册地址在哪里
  • 职业医生继续做学分市哪个网站seo网站优化工具
  • 大型b2b网站建设郑州厉害的seo顾问公司
  • 网站做优化得话从哪里优化哈尔滨企业网站seo
  • 泰安网站建设介绍百度电视剧风云榜
  • 科技类网站设计美国搜索引擎
  • 闸北网站建设网站建设报价方案
  • 网站过度优化郑州网站seo外包公司
  • 高效网站建设公司天津提升专业关键词排名