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

蕲春做网站呼和浩特网站推广

蕲春做网站,呼和浩特网站推广,wordpress视频模板下载,东莞寮步华衍学校Guava的event busguava#xff0c; https://github.com/google/guava 是一个非常有名的Java类库#xff0c;提供了很多在日常开发中常用的集合、函数接口等。此外#xff0c;guava还提供了一个模块叫做event bus#xff0c;生产者往event bus上投递消息#xff0c;event b…Guava的event busguava https://github.com/google/guava 是一个非常有名的Java类库提供了很多在日常开发中常用的集合、函数接口等。此外guava还提供了一个模块叫做event bus生产者往event bus上投递消息event bus负责回调订阅了此类消息的回调函数实现了消息生产者和消费者之间的解耦和异步处理。以下是一个简单的例子public classSimpleListener {Subscribepublic voidtask(String s) {System.out.println(do task( s ));}}public classSimpleEventBusExample {public static voidmain(String[] args) {EventBus eventBus newEventBus();eventBus.register(newSimpleListener());System.out.println(Post Simple EventBus Example);eventBus.post(Simple EventBus Example);}}outputPost Simple EventBus Exampledo task(Simple EventBus Example)event bus集成到spring中在之前的例子和guava的官方文档里面可以看到guava的event bus使用方式如下1. 声明一个event bus对象(线程安全所以可以做到全局唯一而且订阅者和发布者必须共享这个event bus对象)2. 对于订阅者支持 Subscribe定义处理消息的回调函数。3. 对每一个订阅者需要调用event bus的register方法才能收到消息订阅。对于1 和 2都比较好。但是对于第3步来说则有一点困难。因为1. 在spring中通常的你的订阅者还会依赖其他的spring管理的bean于是你的订阅者也会被纳入到spring的生命周期的管理中来这样如果用new的方式来初始化一个订阅者显得非常的不spring。2. 对于每个订阅者都要显式的注册到event bus里面这样并没有做到关注点分离。理想的情况下订阅者是不应该去关注如何注册到event bus中。它只应该申明处理消息的回调函数以及该回调函数是否能够并发调用。注册到event bus中这件事对于订阅者应该是被动且自动的(只需要申明自己是否想注册到event bus而不需要关心细节)。这一点在多人开发并且项目人员水平参差不齐的时候尤其重要。那么如何做到自动注册呢其实答案很简单在spring中ApplicationContext这个类提供了一系列的方法去获取到当前spring context中的bean只需要在event bus初始化之后通过ApplicationContext来获取当前有哪些订阅者并且主动的去注册就行。由于guava的实现中并没有要求订阅者实现某个接口而是用注解的方式来声明回调函数的则这篇文章中的实现也不需要订阅者去实现某个接口而是用注解的方式来申明自己是一个订阅者。代码如下先声明一个注解Target(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)DocumentedServicepublic interfaceEventSubscriber {}对于一个订阅者在类的接口上加上这个注解并且确定这个bean会在纳入spring的生命周期管理中。EventSubscriberpublic class SimpleSubscriber implementsHiDasSubscriber {AutowiredSomebean somebean;SubscribeAllowConcurrentEventspublicInteger logEventToDbAndUpdateStatus(String event) {System.out.println(receive a event:event);}}声明一个event bus的服务并且在初始化之后通过ApplicationContext的 getBeansWithAnnotation 的方法把所有的订阅者获取并且注册到event bus中。Servicepublic class EventBusService implementsInitializingBean{privateEventBus innerBus;InjectprivateApplicationContext appContext;public voidunRegister(Object eventListener){innerBus.unregister(eventListener);}public voidpostEvent(String event){innerBus.post(event);}public voidregister(Object eventListener){innerBus.register(eventListener);}Overridepublic void afterPropertiesSet() throwsException {innerBus new AsyncEventBus(Hidas-event-bus, Executors.newCachedThreadPool());appContext.getBeansWithAnnotation(EventSubscriber.class).forEach((name, bean) -{innerBus.register(bean);});}}完成了这两步之后。如果其他的消息生产者要往event bus上发消息只需要注入这个event bus service并且调用其post方法就好了。注这个只是例子在实际项目中对所有的消息都会声明一个基类或者接口每个订阅者对只会处理消息的某个具体实现。这样event bus会根据消息的具体类型来调用真正关注此类消息的订阅者的回调函数。这样比起让所有消息订阅者去实现一个 onEvent(BaseEvent event)的方法 实际上是避免了一个多路分配的问题。总结对于一些类库在spring中使用这种方法实际上是一种通用的模式实现某个接口或者编写某个注解然后通过ApplicationContext来获取对应的bean之后进行某些注册或者组装操作。这样的话可以让业务的代码和框架的代码做到一定程度的关注点分离。
http://wiki.neutronadmin.com/news/42262/

相关文章:

  • 寒亭网站建设域名个人备案查询
  • 成都网站建设哪家公司好国外手机模板网站推荐
  • 烟台做网站推广的公司公众号平台app
  • dw里响应式网站怎么做如何做积分商城网站
  • ps课堂网站网站如何备案流程
  • 网站建设搜索优德阳seo网站建设
  • 专题类响应式网站建设网站开发对招聘人员要求
  • 淘宝客建立网站宣传网
  • 用网站免费模板做网站要会什么产品推广活动策划方案
  • 昆山网站备案网站头部设计优化
  • 开发一套网站价格租门面做网站
  • 360网站建设服务器潭州学院wordpress
  • 网站在线帮助如何设计沧州seo包年平台排行
  • cad做彩图那个网站应用好用口碑好的移动网站建设
  • 金融企业网站源码ui设计就业方向有哪些
  • 国外优秀的网站设计做网站设计的电脑需要什么配置
  • 建设电子商务网站的目的和意义哪里做百度网站
  • 盐城做网站的哪个公司好电子商务网站建设与管理读后感
  • 怎么找网站做推广北京网站优化托管
  • 福田网站设计哪家好html和php做网站哪个好
  • 校友网站 建设哪个公司的室内设计公司
  • 推介网站淘宝网页版电脑版
  • 未来做哪些网站能致富关键词优化推广
  • 婴幼儿用品销售网站开发报告怎么推广自己的公司网站
  • 网站搭建是什么专业网站建设服务领域
  • 七星彩网投网站建设网站建设方面书籍
  • 企业商务网站建设论文辽宁住房和城乡建设厅网站首页
  • 南京做网站南京乐识权威wordpress playlm版权
  • 网站怎么做关键字北京互联网公司建网站
  • 网站展示型广告地方房地产网站seo实战案例分享