java动态数据国际化_基于 AOP 的动态数据国际化框架的设计与实现
定义 Aspect 的 Advice
[size=1em]声明的 i18nAspect 方法有个 ProceedingJoinPoint 参数,通过它可以获得方法调用的所有信息,包括方法参数、目标对象等,然后,手动调用 jointPoint 的 proceed() 方法来完成对目标对象的方法调用。需要进行增强的国际化功能的实现流程如图 13 所示:
图 13. I18N 方面 Advice 功能流程图
[size=1em]Advice 的关键代码如下所示:
清单 6. 关系数据库国际化支持处理器 initial() 方法关键代码
Class c = jointPoint.getTarget().getClass();// 获取目标类 Object obj = jointPoint.getTarget();// 获取目标对象 Object retVal=null; // 声明对象属性的返回值 // 当前处理类是否需要 I18N 支持 if(c.isAnnotationPresent(I18N.class)){ // 取得全部字段,筛选出标记了 Text 的字段 Field[] fields = c.getDeclaredFields(); // 设置环境语言变量 String defaultLocale =( (I18N)c.getAnnotation(I18N.class)).defaultLocale(); String progSetLocale = LocaleContextHolder.getLocale().toString(); if(progSetLocale==null) progSetLocale = defaultLocale; Config usingConfig = null; for(Field f : fields){ if(f.isAnnotationPresent(Text.class)){ // 如果存在 Text 标记,则进行国际化处理 Text text = f.getAnnotation(Text.class); Object value = f.getName(); // 取得所有配置信息,并确定使用的配置信息 Config[] configs = text.configs(); for(Config config : configs){ String configLocale = config.locale(); if(configLocale.equals(progSetLocale)){ usingConfig = config; break; } } if(usingConfig==null){ boolean flag = false; String t = text.connector().type();// 处理映射 if(t.equals(ConnectorType.RelationDatabase)){ // 应用已注入的关系数据库处理器处理映射 if(flag==true) value = rdbHandler.handle(); }else if(t.equals(ConnectorType.PropertiesFile)){ // 处理资源文件映射 if(flag==true) value = propHandler.handle(); } f.setAccessible(true);// 开启设置字段值 f.set(obj, value); // 设置字段值 f.setAccessible(false);// 关闭设置字段值 } } retVal = jointPoint.proceed(); } else { retVal = jointPoint.proceed(); } return retVal;
[size=1em]定义 Aspect 的 pointcut
[size=1em]Ponintcut 用于针对特定方法使用方面增强。在调用目标对象的某一业务方法时,能够拦截该方法的调用,可以将方面植入到应用程序的流程中。
[size=1em]execution 匹配方法执行时的切入点,表达式如下:
[size=1em]execution( 修饰符?返回类型 声明类型?方法名称 ( 参数类型 ) 异常类型? )
[size=1em]例如,为所有类的 get 方法添加一个 i18nAdvice@Around("execution(* get*())") public Object i18nAdvice(ProceedingJoinPoint jointPoint) { …… }
[size=1em]在执行所有类对象的 get 方法之前,系统关注点 i18nAdvice 将完成国际化公共功能,达到织入国际化管理逻辑的目的。
java动态数据国际化_基于 AOP 的动态数据国际化框架的设计与实现相关推荐
- python交互式数据可视化_基于Python实现交互式数据可视化的工具,你用过几种?...
作者:Alark Joshi 翻译:陈雨琳 来源:数据派THU(ID:DatapiTHU) 我教授了一门关于数据可视化的数据科学硕士课程.我们的数据科学硕士项目是一个为期15个月的强化项目,这个项目已 ...
- java ee 物联网 论文_基于物联网的智能社区互助系统的设计研究论文
基于物联网的智能社区互助系统的设计研究论文 1 绪论 目前行业内的智能社区解决方案分为两大阵营,无线阵营和总线阵营,无线阵营主张以互联网为平台,底层传感网使用短距离无线的传输网,并通过耦合两个异构网络 ...
- 用Java做手机备忘录_基于安卓Android的备忘录系统APP的设计(Eclipse)
基于安卓Android的备忘录系统APP的设计(Eclipse)(任务书,开题报告,论文13000字,程序代码) 摘要 随着移动互联网的高速发展,智能手机的使用已经普及.为了能让智能手机发挥更大的应用 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列、基于dataframe的日期数据列生成日期索引
pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列.基于dataframe的日期数据列生成日期索引(dates in ...
- Matplotlib可视化散点图、配置X轴为对数坐标、并使用线条(line)连接散点图中的数据点、基于分组变量配置数据点的颜色(connecting two coordinates with line
Matplotlib可视化散点图.配置X轴为对数坐标.并使用线条(line)连接散点图中的数据点.基于分组变量配置数据点的颜色(connecting two coordinates with line ...
- Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))
Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用)) 目录 数据增强步骤 数据增强实现代码 ...
- 基于Socket的游戏服务器通信框架的设计与实现
博客地址:blog.liujunliang.com.cn 开发工具:VS2017.Unity2017 本文介绍使用Socket/TCP来开发客户端与服务器端通信框架 博主使用过PhotonServer ...
- java udp包_基于UDP协议的数据包收发程序(代码+报告)Java
[实例简介] 设计要求: 1)按照UDP协议数据包发送方式实现用户端之间的通信. 2)统计包的发送和接收数,计算数据包的丢失数. 3)设计美观易用的图形界面. [实例截图] [核心代码] 基于UDP协 ...
最新文章
- C++拾趣——使用多态减少泛型带来的代码膨胀
- 侠客风云传服务器维护,《侠客风云传online》4月20日服务器数据互通公告
- 【精辟】人工智能先锋人物杰夫·辛顿说:“深度学习将无所不能”
- Web Bundler CheatSheet, 选择合适的构建打包工具
- solidworks操作记录
- 分布式理论(一) - CAP定理
- python网页编程测试_李亚涛:python编写友情链接检测工具
- PTA浙大版python程序设计题目集--第2章-2 计算分段函数[1] (10 分)
- android setContentView处理流程
- Jozky 刷题目录
- JS 给某个对象添加专属方法
- LeetCode 1930. 长度为 3 的不同回文子序列(计数)
- python语言哪个人创造_Python语言是由哪个人创造的?
- C++面试题-面向对象-构造函数和析构函数
- Android应用保活方案的另类出路,让你应用长生不老,实战案例
- 话说Ctrl键的终极含义
- Hive3.1.2安装指南
- 一种通用的Qt数据库接口操作方法
- bat脚本的常用特殊符号
- mfc连接oracle12c,MFC ADO连接Oracle12c数据库 类库文件
热门文章
- 路由器性能测试工具_小米路由器AX3600与AX1800 MESH 实测
- java p=x,Java-Tutorial/20、javac和javap.md at master · allenchenx/Java-Tutorial · GitHub
- matlab错误打印,MATLAB中数据输出格式出现错误?
- opencv 计数后不动了 训练模型时_用OpenCV,深度学习和Python进行年龄识别
- 从Http的连接到WebSocket
- Spring Boot读取application.yaml属性
- 【OJ1768】最大子矩阵
- linux perl开发工具,专家推荐 几款常用Perl开发工具
- java能字典_适用于Java的任何字典定义API?
- java 求集合真子集_【每日打卡】新高一数学必修打卡第二天教学视频—集合的基本运算...