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

漳州市长泰县建设局网站在线制作电子公章生成器

漳州市长泰县建设局网站,在线制作电子公章生成器,通信工程师,网站开发技术 创新点介绍 观察者模式的本质是“定义对象之间的一对多依赖关系#xff0c;以便当一个对象改变状态时#xff0c;其所有依赖关系都会得到通知并自动更新。” GoF。 观察者模式是发布/订阅模式的子集#xff0c;它允许许多观察者对象查看事件。 可以在不同的情况下使用此模式#… 介绍 观察者模式的本质是“定义对象之间的一对多依赖关系以便当一个对象改变状态时其所有依赖关系都会得到通知并自动更新。” GoF。 观察者模式是发布/订阅模式的子集它允许许多观察者对象查看事件。 可以在不同的情况下使用此模式但总而言之可以说观察者模式可以在对象应该能够将消息通知其他对象并且您不希望这些对象紧密耦合时应用。 就我而言当异步事件应通知一个或多个图形组件时我使用了这种模式。 可以使用临时解决方案或使用java.util.Observer/Observable类来实现此模式。 但是我的项目总是用Spring开发的无论是Web还是桌面应用 。 因此在当前文章中我将解释如何使用Spring实现Observer模式。 手扶 Spring ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口提供的。 如果将实现ApplicationListener接口的bean部署到上下文中则每次将ApplicationEvent发布到容器时 ApplicationListener都会接收到它。 Spring带有内置事件例如ContextStartedEvent ContextStoppedEvent 但是您也可以创建自己的自定义事件。 为了开发自己的事件需要三个类 观察者角色 可观察角色和事件 。 观察者是那些接收事件并且必须实现ApplicationListener类的人。 可观察类负责发布事件并且必须实现ApplicationEventPublisherAware 。 最后 事件类必须扩展ApplicationEvent 。 编码 我要实现的是Observer模式的Wikipedia示例 http://en.wikipedia.org/wiki/Observer_pattern#Example 但是使用Spring Events而不是Observer / Observable Java类。 该示例是一个基本的发布/订阅示例其中一个String消息从一个模块发送到另一个模块。 让我们创建MessageEvent 。 此事件包含一个String它表示我们要发送的消息。 这是一个从ApplicationEvent扩展的简单类。 public class MessageEvent extends ApplicationEvent {*** *private static final long serialVersionUID 5743058377815147529L;private String message;public MessageEvent(Object source, String message) {super(source);this.message message;}Overridepublic String toString() {StringBuilder builder new StringBuilder();builder.append(MessageEvent [message).append(message).append(]);return builder.toString();}} 下一个类是Observable类。 此类必须实现ApplicationEventPublisherAware 。 此接口使用ApplicationEventPublisher作为参数定义了一个setter方法。 此参数用于发布事件。 在当前的实现中该代码还实现了Runnable接口因此用户可以从控制台输入中进行创建 public class EventSource implements Runnable, ApplicationEventPublisherAware {private ApplicationEventPublisher applicationEventPublisher null;public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.applicationEventPublisher applicationEventPublisher;}public void run() {final InputStreamReader isr new InputStreamReader(System.in);final BufferedReader br new BufferedReader(isr);while (true) {try {String response br.readLine();System.out.println(Thread.currentThread().getName());this.applicationEventPublisher.publishEvent(new MessageEvent(this, response));} catch (IOException e) {e.printStackTrace();}}}} Observer类甚至更简单。 实现ApplicationListener接口。 发布事件时将调用onApplicationEvent方法。 看到它是一个通用接口因此不需要强制转换。 这不同于java.util.Observer类。 public class ResponseHandler implements ApplicationListenerMessageEvent {public void onApplicationEvent(MessageEvent messageEvent) {System.out.println(Thread.currentThread().getName());System.out.println(messageEvent);}} 在应用程序上下文文件中您同时注册了ApplicationListener和ApplicationEventPublisherAware Bean。 最后是一个主类来测试系统。 创建一个线程以执行多个异步事件。 public class MyApp {public static void main(String args[]) {ApplicationContext applicationContext new ClassPathXmlApplicationContext(classpath:META-INFspringapp-context.xml);EventSource eventSource applicationContext.getBean(eventSource, EventSource.class);Thread thread new Thread(eventSource);thread.start();}} 因此启动程序并编写一些内容以进行控制台。 您将看到类似以下内容 你好 Thread-0 Thread-0 MessageEvent [message hello] 我输入了“ hello ”消息并打印了事件发布者的线程名 。 然后发送事件并打印处理程序线程名称 。 最后显示接收到的事件。 有一件事情应该引起您的注意。 发送者 Observable 和接收者 Observer 都在同一线程中执行 默认情况下事件侦听器同步接收事件。 这意味着publishEvent方法将阻塞直到所有侦听器都已完成对事件的处理为止。 这种方法有很多优点例如重用事务上下文等但是在某些情况下您希望每个事件都在新线程中执行 Spring也支持此策略。 在Spring中 负责事件管理的类是SimpleApplicationEventMulticaster 。 此类将所有事件多播到所有注册的侦听器让侦听器忽略它们不感兴趣的事件。默认行为是在调用线程中调用所有侦听器。 现在我将解释如何初始化Spring Event Architecture以及如何进行修改。 默认情况下当ApplicationContext为 启动后它将调用initApplicationEventMulticaster方法。 此方法验证是否存在与类型ApplicationEventMulticaster的ID applicationEventMulticaster的bean。 如果是这样则使用已定义的ApplicationEventMulticaster 否则将创建具有默认配置的新SimpleApplicationEventMulticaster 。 SimpleApplicationEventMulticaster具有可用于指定哪些java.util.concurrent.Executor将执行事件setTaskExecutor。 因此如果您希望每个事件在不同的线程中执行那么一个好的方法是使用ThreadPoolExecutor 。 如上一段所述现在我们必须显式定义SimpleApplicationEventMulticaster而不是 使用默认的。 让我们实现 beans xmlnshttp:www.springframework.orgschemabeans xmlns:xsihttp:www.w3.org2001XMLSchema-instance xmlns:contexthttp:www.springframework.orgschemacontext xmlns:taskhttp:www.springframework.orgschematask xsi:schemaLocationhttp:www.springframework.orgschematask http:www.springframework.orgschemataskspring-task-3.0.xsd http:www.springframework.orgschemabeans http:www.springframework.orgschemabeansspring-beans-3.0.xsd http:www.springframework.orgschemacontext http:www.springframework.orgschemacontextspring-context-3.0.xsdbean ideventSource classorg.asotobu.oo.EventSource bean idresponseHandler classorg.asotobu.oo.ResponseHandler task:executor idpool pool-size10 bean idapplicationEventMulticaster classorg.springframework.context.event.SimpleApplicationEventMulticasterproperty nametaskExecutor refpool beanbeans 首先必须将SimpleApplicationEventMulticaster定义为ID为applicationEventMulticaster的bean。 然后设置任务池然后我们重新运行主类。 输出将是 你好 线程1 池1 MessageEvent [message hello] 请注意现在发送方和接收方线程有所不同。 当然您可以为更复杂的操作创建自己的ApplicationEventMulticaster 。 您只需要实现ApplicationEventMulticaster并使用applicationEventMulticaster bean名称定义它事件将根据您自己的策略执行。 希望现在您的Spring桌面应用程序可以充分利用Spring事件来分隔模块。 下载代码。 参考来自JCG合作伙伴 Alex Soto的Spring Events观察者模式来自One Jar To Rule All All博客。 翻译自: https://www.javacodegeeks.com/2012/08/observer-pattern-with-spring-events.html
http://wiki.neutronadmin.com/news/60491/

相关文章:

  • 单页网站程序天眼查公司查询企业查询
  • 南通网站建设制作公司网店代运营合同模板
  • 泉港报名网站建设需要东莞企业网站建设开发公司
  • 最大的网站建设营销型网站建设的流程
  • 娱乐手机网站开发东莞模板建网站平台
  • 网站开发项目需求分析书护肤品网站建设策划书
  • 西宁网站搭建专业公司免费发布产品信息网站
  • 招商网站建设需要什么抖音代运营服务框架
  • 商标网站建设陕西营销型网站制作
  • 满山红厦门网站建设网站分站系
  • 杭州网站制作培训玉树营销网站建设哪家好
  • 电子商务网站建设客户需求调查表网站建设礼品
  • 网站开发安全问题申请免费网站公司
  • 网站做一个多少钱旅游景区网络推广方案
  • 织梦系统网站首页upcache=1有专门做电商网站的CMS吗
  • 网站开发的数据库技术程序员做个网站要多少钱呢
  • 网站开发公司网站导航设置
  • 如何做网站seo诊断种子搜索器
  • 兰考网站建设做电商网站公司简介
  • 陕西建新建设有限公司网站搜索引擎营销特点
  • 建设工程规划许可证查询网站黄冈网络推广服务平台
  • 有了域名就可以做网站了吗个人网站主办者名称
  • 网站导航设计模板wordpress 随机显示文章
  • 东莞石排网站建设html5购物网站模板
  • wap php网站源码网页设计导航栏尺寸
  • 肇庆建设网站2345官方网站
  • dw网站建设浙江省建设职业技术学院网站
  • 山东三强建设咨询有限公司网站南京比较有名的广告公司
  • 制作网站404页面网站建设需要的材料
  • 网站后台怎么添加图片销售管理软件crm