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

网站建设课程设计论文地推的60种方法

网站建设课程设计论文,地推的60种方法,物联网是干嘛的,分析网站的网站本章我们继续讲ApplicationContext的特有特性国际化信息支持:全世界有很多不同的国家和地区,每个国家或者地区都使用各自的语言文字。当今全球化的信息大潮中,要让我们的程序可以提供给全世界不同地区使用就必须要支持面向他们国家或者地区的…

本章我们继续讲ApplicationContext的特有特性

国际化信息支持:

全世界有很多不同的国家和地区,每个国家或者地区都使用各自的语言文字。当今全球化的信息大潮中,要让我们的程序可以提供给全世界不同地区使用就必须要支持面向他们国家或者地区的语言和文字

Java SE的国际支持

本身java se的国际化不是三言两语可以讲清楚的,它涉及许多的内容,如货币形式的格式化,事件的表现形式等等。

在java中的国际化信息处理,主要设计两个类:

1.local

不同的locale代表不同的国家和地区,每个国家和地区在locale这里都有相应的简写代码表示,包括语言代码以及国家代码,这些代码是ISO标准代码。

    /*** Construct a locale from language, country and variant.* This constructor normalizes the language value to lowercase and* the country value to uppercase.* @implNote* <ul>* <li>Obsolete ISO 639 codes ("iw", "ji", and "in") are mapped to* their current forms. See <a href="#legacy_language_codes">Legacy language* codes</a> for more information.* <li>For backward compatibility reasons, this constructor does not make* any syntactic checks on the input.* <li>The two cases ("ja", "JP", "JP") and ("th", "TH", "TH") are handled specially,* see <a href="#special_cases_constructor">Special Cases</a> for more information.* </ul>** @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag* up to 8 characters in length.  See the {@code Locale} class description about* valid language values.* @param country An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code.* See the {@code Locale} class description about valid country values.* @param variant Any arbitrary value used to indicate a variation of a {@code Locale}.* See the {@code Locale} class description for the details.* @throws    NullPointerException thrown if any argument is null.*/public Locale(String language, String country, String variant) {if (language == null || country == null || variant == null) {throw new NullPointerException();}baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), "", country, variant);localeExtensions = getCompatibilityExtensions(language, "", country, variant);}/*** Construct a locale from language and country.* This constructor normalizes the language value to lowercase and* the country value to uppercase.* @implNote* <ul>* <li>Obsolete ISO 639 codes ("iw", "ji", and "in") are mapped to* their current forms. See <a href="#legacy_language_codes">Legacy language* codes</a> for more information.* <li>For backward compatibility reasons, this constructor does not make* any syntactic checks on the input.* </ul>** @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag* up to 8 characters in length.  See the {@code Locale} class description about* valid language values.* @param country An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code.* See the {@code Locale} class description about valid country values.* @throws    NullPointerException thrown if either argument is null.*/public Locale(String language, String country) {this(language, country, "");}/*** Construct a locale from a language code.* This constructor normalizes the language value to lowercase.* @implNote* <ul>* <li>Obsolete ISO 639 codes ("iw", "ji", and "in") are mapped to* their current forms. See <a href="#legacy_language_codes">Legacy language* codes</a> for more information.* <li>For backward compatibility reasons, this constructor does not make* any syntactic checks on the input.* </ul>** @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag* up to 8 characters in length.  See the {@code Locale} class description about* valid language values.* @throws    NullPointerException thrown if argument is null.* @since 1.4*/public Locale(String language) {this(language, "", "");}

提供了三个构造方法,这样我们就能根据相应的语言代码和国家代码来构造相应的locale了。常用的locale都提供有静态常量,不用我们自己重新构造。

2.ResourceBundle

ResourceBundle用来保存特定于某个Locale的信息(可以是String类型的信息,也可以是任何类型的对象)。通常,ResourceBundle管理一组信息序列

有了ResourceBundle对应的资源文件之后,我们就可以通过ResourceBundle的getBundle(String baseName,Locale locale)方法取得不同的Locale对应的ResourceBundle,然后根据资源的键取得相应的Locale的资源条目内容。

MessageSource:

Spring则是在Java SE的国际化支持上进一步抽象了国际化信息的访问接口,也就是MessageSource ,也就是属于Spring的ResourceBundle

public interface MessageSource {@NullableString getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale);String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
}

通过该接口,我们统一了国际化信息的访问方式,采用传入相应的locale,资源的键以及相应的参数信息就可以取得相应的信息,而无需根据locale取得ResourceBundle,然后再从ResourceBundle查询信息了。

我们知道ApplicationContext除了实现了ResourceLoader以支持统一的资源加载,他还实现了MessageSource接口,也就是说本身ApplicationContext就是一个MessageSource。但是ApplicationContext依旧不会自己去充当MessageSource而是委托给一个MessageSource类型的bean交给他来实现具体的逻辑。在默认情况下,ApplicationContext将委派容器中一个名称为messageSource的messageSource接口实现来完成messageSource应该完成的职责。如果找不到这样一个名字的messageSource那么内部会默认实例化一个messageSource对象加载到容器内部

而这个messageSource则是通过messageSourceAware来注入messageSource的,而注入的这个messageSource往往就是需要进行委托的

容器内部事件发布:

spring的ApplicationContext容器提供的容器内事件发布功能,是通过提供一套基于Java SE标准自定义事件类而实现的。为了更好的了解这组定义事件类,先从Java SE的标准自定义事件类实现的推荐流程说起。

自定义事件发布:

Java SE提供了实现自定义事件发布功能的基础类,EventObject和EventListener接口。所有的自定义事件都可以通过扩展EventObject来实现,而事件的监听器则扩展自EventListener。

如果想自定义事件类型则需要继承EventObject类去重写自己类的属性,当事件发布和监听之后相应的监听器即可对该类型的事件进行处理。在java SE中的事件监听器并不会去监听所有的事件,这样会导致监听器非常繁忙,那么每个监听器只会监听自己范围内的事件。那么我们自定义了事件如果没有对应的监听器进行监听,事件则不会触发发挥作用。

因此我们还要自定义对应的事件监听器来处理相应的事件,自定义事件监听器则是继承EventListener接口,最主要的就是,这些处理方法所接受的参数就是自定义事件的参数

那么有了事件监听器和事件,接下来就是如何触发事件监听器呢,这里则需要事件发布器。它的作用则是触发了某个事件之后发布对应的事件,那么这些事件监听器则会发挥其对应的作用。对于事件的发布器来说往往是需要自己去定义在哪里触发事件,这些没有特定的类来进行规范。采用的方式往往是观察者模式,事件广播器将会内部拥有一个事件监听器的集合,当事件触发的时候通知集合内部的事件监听器从而达到触发事件的效果。

spring内事件发布类结构分析

讲完了Java SE的事件发布机制,下面我们来讲一讲spring是如何进行事件发布的。spring的事件监听器会被ApplicationContext容器自动去识别并且加载到容器里面,并且这些监听器当监听到事件之后则会对事件进行处理

ApplicationContext本身继承了ApplicationEventPublisher(spring内的事件广播器)担当了事件发布者的角色,但是在实际操作的过程中并没有ApplicationContext亲自下场充当事件发布,而是依然通过委派的方式来实现的,ApplicationContext将活交给一个叫做ApplicationEventMulticaster的接口,该接口定义了具体时间监听器的注册管理以及时间发布的方法,他的子类则是将这些业务进行了具体的实现,默认使用的是SyncTaskExecutor(SyncTaskExecutor 是 Spring Framework 中提供的一个同步任务执行器(TaskExecutor 接口的实现类)。它的核心特点是同步执行任务,即在调用线程中立即执行任务,而不是异步提交到线程池。)进行事件发布的,所以容器一开始就会检测是否有ApplicationEventMulticaster的对象实例,有的话就会提供实现,没有的话则会系统默认生成一个ApplicationEventMulticaster

SyncTaskExecutor 的特点

  1. 同步执行
    当调用 execute(Runnable task) 方法时,任务不会异步执行,而是在当前调用线程中直接运行 task.run(),相当于阻塞式执行。

  2. 无线程池
    不创建任何新线程,也不使用线程池,任务始终在调用者线程中执行。

  3. 简单轻量
    实现简单(仅约 20 行代码),适用于不需要异步的场景。


文章转载自:

http://rWrXpY6Z.gnbfj.cn
http://uqqROS5m.gnbfj.cn
http://w61Ai6gx.gnbfj.cn
http://pDf4VjOY.gnbfj.cn
http://4ja5Ikdy.gnbfj.cn
http://AQShyPtM.gnbfj.cn
http://LdRfXGFE.gnbfj.cn
http://hYlnqQpp.gnbfj.cn
http://8rD0bBs3.gnbfj.cn
http://Yz6DTPG4.gnbfj.cn
http://VdeY4NRf.gnbfj.cn
http://FeQMDS6s.gnbfj.cn
http://LXvCvtyL.gnbfj.cn
http://dGEYJzgC.gnbfj.cn
http://qsR5xGxV.gnbfj.cn
http://hwWPemlV.gnbfj.cn
http://QR4EVqcW.gnbfj.cn
http://z0OYF5lE.gnbfj.cn
http://FgWma1l1.gnbfj.cn
http://jULFylBV.gnbfj.cn
http://SE8phfv7.gnbfj.cn
http://xHfQlUyd.gnbfj.cn
http://OZdzkdYE.gnbfj.cn
http://qZle2e47.gnbfj.cn
http://II2jVU7U.gnbfj.cn
http://oH2dkuEt.gnbfj.cn
http://IwTYCweW.gnbfj.cn
http://hj2aTlcX.gnbfj.cn
http://4VQrCih1.gnbfj.cn
http://Cqit9FDh.gnbfj.cn
http://www.dtcms.com/wzjs/704748.html

相关文章:

  • 做网站所需的知识技能西宁那有做网站的
  • 设计企业网站步骤溧阳做网站价格
  • html5手机网站 源码网站搭建逻辑结构图
  • 金融企业类网站模板免费下载上海工信部网站备案
  • 建自己的个人网站网站模板模板
  • app开发公司 无冬汉中seo培训
  • wordpress博客头图怎么改吉林网络seo
  • 仿租号网站源码网站开发访问域名进入WordPress指定的页面
  • 做网站时如何建立栅格南昌哪家网站开发公司好
  • 嘉峪关网站seoaspnet网站开发教程
  • 网站接入服务提供单位成都的装修公司有哪些
  • 腾讯域名注册网站陈列设计师培训
  • 为什么做网站编辑咸阳做网站的公司
  • 西安网站工作室做微信网站价格
  • 贵阳做企业网站商城网站开发项目描述
  • 做网站用那种数据库网站建设对比分析
  • 怎么做电影网站吗朝阳专业做网站
  • wordpress提高浏览量整站seo技术
  • 绍兴专业做网站海南公司注册网站
  • 廊坊做网站的企业哪家好河南卫生基层系统网站建设
  • 网站如何留住客户eclipse wordpress
  • html写手机网站怎样给自己网站做反链
  • 温州网站优化关键词泰安招聘网站有哪些
  • 网站 栏目做下拉网址谁有给我一个
  • wordpress编辑和作者的权限区别莱芜网站优化费用
  • html简单网站成品免费免费推广软件有哪些
  • 做一借款撮合网站有限公司和责任公司的区别
  • 物业公司网站建设建筑单位资质
  • 云南网站建设专家域名申请证书
  • 查建筑材料的网站wordpress 无广告视频插件下载