基于AOP的动态数据国际化框架的设计与实现.docx
- 文档编号:4597290
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:17
- 大小:369.35KB
基于AOP的动态数据国际化框架的设计与实现.docx
《基于AOP的动态数据国际化框架的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于AOP的动态数据国际化框架的设计与实现.docx(17页珍藏版)》请在冰豆网上搜索。
基于AOP的动态数据国际化框架的设计与实现
基于AOP的动态数据国际化框架的设计与实现
1.已存在的动态数据国际化解决方法不易于移植和复用。
2.没有现成的动态数据国际化解决方案或框架。
针对以上问题,需要提出一个动态数据国际化的解决方案。
为了在短时间内,规范高效的构建出国际化的网络 春季轻量级框架的J2EE架构的网络应用国际化框架,简化系统国际化的实现过程。
目标是:
1.使该国际化框架适用于关系数据库或对象关系数据库。
2.
3.新的框架要易于配置。
4.框架的代码可以复用,能有效地提高系统的开发效率。
动态数据国际化框架模型的设计与实现
总体设计
本框架基于J2EE的三层架构(UI层,逻辑层和持久层),如图1所示。
所有层次都应遵循统一准则,即内部编码采用统一标准,B/S架构的推荐使用UTF-8编码。
图1。
基于B/S模式的国际化总体逻辑框架
图2。
动态数据国际化框架设计
该容器由国际化配置的注解,DAO层资源处理器和充当过滤器的角色,实现国际化公共增强功能的方面这3部分组合而成。
该容器中,国际化看点,主要根据实体豆的注释标签判断访问哪种资源,采用哪种资源处理器进行处理。
该容器中,DAO层的资源处理器,主要根据实体Bean的注释中的配置信息,对资源进行存取访问操作,获取资源。
分层结构是基于B/S架构的JavaEE的
该框架有以下几点优势:
1.不依靠资源的持久化方式;
可使用资源文件或关系数据库存储信息。
用关系数据库存储时,无论是单表还是分表,都可以完成数据存取。
2.国际化功能与业务逻辑解耦;
编程人员可以专注于核心的BO \
3.坚持以面向对象的设计为主,AOP设计为辅,可缩减代码,控制的开发的成本;
4.用注解实现对象关系数据库间的一一映射。
它管理的Java类到数据库表的映射,在的JavaBean中只嵌入注解标签即可,与国际化有关的代码完全提取到注解的实现豆中的,JavaBean中完全不使用国际化相关代码,方便复用和调试。
模型实现
框架的运行时序图如图3所示:
图3。
动态元素国际化方面序列图
分析上面的运行时序可知:
1.首先由业务逻辑层对象调用获取实体Bean的属性值的方法。
2.如果该方法有国际化标签,需要国际化支持,则织入I18NAspect方面,进行国际化功能增强。
3.根据属性的注解配置,由相应的处理器进行处理。
4.最后把取得的资源值返回给实体类的属性。
至此完成国际化功能的织入,然后BO层可以继续执行核心业务逻辑。
下面就逐个组件实现以上功能。
注释注解提供国际化配置
本框架中的注释用于对类或属性提供国际化的配置信息。
共定义5个注解:
ConnectorType,连接器,配置,文本和本地化。
它们之间的关系类图如图4所示:
图4。
注释类图
1.@ConnectorType
国际化资源连接类型。
此标签与@连接器联合使用。
功能:
用于标识国际化
RelationDatabase:
标识从数据库中读取动态国际化信息数据。
PropertiesFile:
标识从资源文件中读取静态国际化数据。
2.@连接器
连接器,此标签与@文字联合使用。
功能:
负责连接关系数据库,或是资源文件。
类型:
连接类型,决定本地化资源处理方法,由ConnectorType定义,只可能有读取资源文件或访问数据库两种方式。
产品名称:
连接名称,当访问资源文件时,名称表示资源文件的名称。
当访问数据库时,名称表示连接数据的数据源名称,可以根据名称从春季的配置文件中依赖IOC获得数据源连接的相关配置。
3.@配置
类属性的国际化配置项。
此标签与@文字联合使用。
功能:
对象和关系数据库表的映射工具,实现的Java对象模型和数据库关系模型的互相转化和一一映射。
它包含4个属性。
标签中的语言环境是必选项,指出了所支持的对国家/语言环境。
表,列keyValueField;
4.@文字
作用在类的属性上,对属性进行国际化配置。
功能:
建立不同语言环境下对象和数据库OR映射,或建立对象与资源文件中记录的对应关系。
Key:
主键,表示唯一记录,若数据库访问则表示确定该属性的唯一关键字段,若读取资源文件则表示该属性对应的键值。
连接器:
连接器的属性,表示连接关系数据库,还是资源文件。
CONFIGS:
配置项“数组,每一条配置的项对应一种语言的国际化支持。
CONFIGS[0]为英文配置信息,CONFIGS[1]为中文配置信息。
5.@国际化
defaultLocale定义了默认的语言环境,初始值是“EN_US”。
下面将使用已定义好的注解注解,用标签修饰类文件。
1。
以访问关系数据库为例,建立国家对象的国家名称属性名称与数据库字段之间的OR映射类CountryBean的属性及方法如图所示。
图5.CountryBean类图
用标签来对“国家名称”的名称属性进行配置,标签声明如下:
清单1。
使用标签配置属性实例一
@文本(
连接器=@连接器(名称=“DS”,类型=ConnectorType.RelationDatabase),键=“身份证”
CONFIGS={
@配置(区域“EN_US”,表=“国家”,列=“country_en”,keyValueField=“ID”),
@配置=“国家(区域=”zh_CN的“表”,列=“country_ch”的keyValueField=“ID”)}
)
连接器属性连接器 ID字段,它标识该表内的唯一记录。
国际化配置项配置表示名称 名称值,需要查询国家库表的country_en字段,并由ID字段确定是哪一条记录,其中的语言环境=“en_US”表示表示它为英文环境的配置信息,映射国表的country_en字段,关键字段为ID。
2。
以资源文件为例,建立国家对象的国家名称属性名称与资源文件中英文国家名称之间的映射。
清单2。
使用标签配置属性实例二
@文本(连接器=@连接器(名称=“myresource的,类型=ConnectorType.PropertiesFile)
关键=“COUNTRY_NAME”,CONFIGS={@配置(区域=“en_US”表示),配置(区域=“ZH_CN”)}
)
连接器属性连接器的配置表示资源为名为myresource的资源文件,键表示关键字是COUNTRY_NAME,国际化配置的项配置的配置分别表示中英文资源文件的后缀。
国际化资源处理器的设计和实现
如图5所示,是处理器接口,及两个处理器实现类之间的关系类图。
图6。
国际化处理器类图
设计出的国际化处理器由一个接口,两个实现类组成。
处理器接口处理器
∙资源文件国际化支持处理器
功能:
根据关键字的关键,从资源文件的源中获取静态信息的属性值。
其类图如图7所示。
图7。
资源文件国际化支持处理器类图
1.初始()初始化方法的设计和实现
目的:
用于初始化资源文件的国际化支持处理器,设置资源文件名资源和关键字键的值。
资源文件的国际化支持处理器初始化功能状态图如图8所示。
图8。
资源文件国际化支持处理器初始化功能状态图
关键代码实现如下所示:
清单3。
资源文件国际化支持处理器的初始()方法关键代码
弦乐rsName=text.connector的()名();//由配置标签文本中读取资源文件名称
//获取资源文件
资源资源=context.getResource(
“类路径:
的”+rsName+“_”+config.locale()+“物业”);
setResource(资源);//设置资源文件
SETKEY(text.key());//读取配置标签,设置关键字的关键值
2.处理()处理方法的设计和实现
资源文件国际化支持处理器手柄()方法功能流程如图9所示。
图9。
资源文件国际化支持处理器手柄()方法功能状态图
关键代码如下所示:
清单4。
资源文件国际化支持处理器手柄()方法关键代码
属性属性=新的属性();//加载资源文件
properties.load(resource.getInputStream());
retVal的对象=properties.getProperty(键)//根据关键字取得属性值;
∙关系数据库国际化支持处理器
功能:
从关系数据库中存取动态信息。
获取对象的属性标签中的OR映射配置信息,在关系数据库中查询该属性。
其类图如图10所示。
图10。
关系数据库国际化支持处理器类图
属性:
该处理器有5个属性,TABLENAME为数据库表名称的ColumnName为与属性一一映射的字段名称,KEYNAME为该表的关键字段,的keyValue为确定唯一记录的关键字段的值。
以上4个属性,为访问数据库提供支持,通过它们拼装完整的SQL语句,数据源是数据源名称。
∙初始()初始化方法的设计和实现
目的:
用于初始化关系数据库国际化支持处理器,设置与访问数据库相关的5个属性的初值。
其中TABLENAME的ColumnName由参数配置标签中的表,列配置信息获取。
KEYNAME由参数文本标签的属性键获取DataSource的由参数文本的连接器属性连接器的名称中的配置信息获取。
关键代码实现如下所示:
清单5。
关系数据库国际化支持处理器的初始()方法关键代码
弦乐的dsName=text.connector()名();//由文本标签获得数据源名称
数据源数据源(数据源)context.getBean(的dsName);
的setDataSource(数据源);//设置数据源
setColumnName(config.column());//设置属性对应字段名称
setTableName(config.table());//设置要访问的数据库表名称
setKeyName(text.key());//设置关键字段名称
∙处理()处理方法的设计和实现
JDBCAPI,也可休眠等其它DAO框架。
国际化方面的设计与实现
国际化方面要实现封装国际化功能,使其与核心业务逻辑分离解耦。
AOP I18NAspect实现国际化增强。
如图11所示,方面I18NAspect
图11。
对象,连接点方面,数据对象耦合结构图
可以把看点简单地理解为一个忠告增强和一个切入点切入点的组合,如图11所示,每个切入点实现都会对应有一个实现的建议。
忠告用于封装需要增强的国际化功能;Ponintcut用于定义何时,何处将建议织入到目标对象的,只对符合条件方法的增强。
图12。
看点运行机制流程图
1.声明看点
Spring2.0中引入了AspectJ中的注解,可以通过Java5的注解以AspectJ中的语法在春季中配置AOP。
AspectJ的是目前最完善的AOP的解决方案,它扩展了Java的语法,定义了额外的AOP语法关键字,它提供了AOP技术的所有特性,包括针对字段的拦截。
使用AspectJ的注解实现AOP的最大的优点是配置极为简单,可以大大简化代码的编写和XML配置文件的用AspectJ注解实现AOP的方面定义为:
@看点
公共类I18NAspect实现ApplicationContextAware{...}
该类被标记为@纵横,表示这是一个方面类。
下面,将对I18NAspect进行详细设计,为其添加咨询和切入点。
2.定义看点的忠告
声明的i18nAspect方法有个ProceedingJoinPoint jointPoint的proceed()方法 13所示:
图13。
国际化方面建议功能流程图
建议的关键代码如下所示:
清单6。
关系数据库国际化支持处理器的初始()方法关键代码
类Ç=jointPoint.getTarget()的getclass();//获取目标类
obj对象=jointPoint.getTarget();//获取目标对象
retVal的对象=NULL;//声明对象属性的返回值
//当前处理的类是否需要国际化支持
(c.isAnnotationPresent(I18N.class)){
//取得全部商情字段,筛选出标记了文本的字段
[现场]栏=c.getDeclaredFields();
//设置环境语言变量
弦乐defaultLocale=(
(I18N)c.getAnnotation的(I18N.class))。
defaultLocale();
弦乐progSetLocale=LocaleContextHolder.getLocale()。
的toString();
(progSetLocale==NULL)progSetLocale=defaultLocale;
配置usingConfig=NULL;
(现场传真:
字段){
(f.isAnnotationPresent(Text.class)){
//如果存在文字标记,则进行国际化处理
文字文本=f.getAnnotation(Text.class);
Object值=f.getName();
//取得所有配置信息,并确定使用的配置信息
配置[]的configs=text.configs();
(配置配置的configs){
configLocale=config.locale();
如果(configLocale.equals,(progSetLocale)){
=配置usingConfig;
打破;
}
}
如果(usingConfig==NULL){
布尔标志=FALSE;
弦乐T=text.connector的()。
类型();//处理映射
如果(t.equals,(ConnectorType.RelationDatabase)){
//应用已注入的关系数据库处理器处理映射
如果(旗==真)值=rdbHandler.handle();
的}elseif(t.equals(ConnectorType.PropertiesFile)){
//处理资源文件映射
如果(旗==真)值=propHandler.handle();
}
(真f.setAccessible);//开启设置字段值
f.set(OBJ,价值);//设置字段值
(假f.setAccessible);//关闭设置字段值
}
}
retVal的jointPoint.proceed的();
}{
retVal的jointPoint.proceed的();
}
返回retVal的;
定义看点的切入点
Ponintcut
执行匹配方法执行时的切入点,表达式如下:
执行(修饰符?
返回类型声明类型?
方法名称(参数类型)异常类型?
)
例如,为所有类的获得方法添加一个i18nAdvice
@(左右“执行(*())”)
公共对象i18nAdvice(ProceedingJoinPointjointPoint的)
{......}
在执行所有类对象的获取方法之前,系统关注点i18nAdvice将完成国际化公共功能,达到织入国际化管理逻辑的目的。
动态数据国际化框架的应用
本文研究的框架,已经完整应用于一个基于J2EE的的网络应用系统。
系统的中,英文运行界面如图14,15所示。
图14。
中文的Web应用运行效果
图15。
WEB应用英文运行效果
图16。
网络应用气象信息模块的中文运行效果
图17。
网络应用气象信息模块的英文运行效果
结论
本文旨在生成一种基于J2EE架构的网络应用动态数据国际化框架。
本框架通过以下方法实现了创新:
1.使用注释注解提供国际化配置,完成对不同语言环境下,不同持久化方式下的地区/语言信息的封装。
2.
3.借助弹簧的AOP技术,设计并实现了封装国际化功能的看点方面,将国际化相关的操作提取到方面中,使其与核心业务逻辑分离。
该方案已成功应用于“运动会综合信息查询系统”中。
通过使用本框架使用,可以实现高效的国际化软件开发,减少本地化过程所需要的时间和精力,降低软件维护成本。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AOP 动态 数据 国际化 框架 设计 实现