您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 基于AOP的动态数据国际化框架的设计与实现
基于AOP的动态数据国际化框架的设计与实现1.已存在的动态数据国际化解决方法不易于移植和复用。2.没有现成的动态数据国际化解决方案或框架。针对以上问题,需要提出一个动态数据国际化的解决方案。为了在短时间内,规范高效的构建出国际化的网络春季轻量级框架的J2EE架构的网络应用国际化框架,简化系统国际化的实现过程。目标是:使该国际化框架适用于关系数据库或对象关系数据库。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框架。国际化方面的设计与实现国际化方面要实现封装国际化功能,使其与核心业务逻辑分离解耦。AOPI18NAspect实现国际化增强。如图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方法有个ProceedingJoinPointjointPoint的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;配置usingCo
本文标题:基于AOP的动态数据国际化框架的设计与实现
链接地址:https://www.777doc.com/doc-2568167 .html