定义 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 的动态数据国际化框架的设计与实现相关推荐

  1. python交互式数据可视化_基于Python实现交互式数据可视化的工具,你用过几种?...

    作者:Alark Joshi 翻译:陈雨琳 来源:数据派THU(ID:DatapiTHU) 我教授了一门关于数据可视化的数据科学硕士课程.我们的数据科学硕士项目是一个为期15个月的强化项目,这个项目已 ...

  2. java ee 物联网 论文_基于物联网的智能社区互助系统的设计研究论文

    基于物联网的智能社区互助系统的设计研究论文 1 绪论 目前行业内的智能社区解决方案分为两大阵营,无线阵营和总线阵营,无线阵营主张以互联网为平台,底层传感网使用短距离无线的传输网,并通过耦合两个异构网络 ...

  3. 用Java做手机备忘录_基于安卓Android的备忘录系统APP的设计(Eclipse)

    基于安卓Android的备忘录系统APP的设计(Eclipse)(任务书,开题报告,论文13000字,程序代码) 摘要 随着移动互联网的高速发展,智能手机的使用已经普及.为了能让智能手机发挥更大的应用 ...

  4. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  5. pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列、基于dataframe的日期数据列生成日期索引

    pandas使用date_range函数按照指定的频率(freq)和指定的个数(periods)生成dataframe的时间格式数据列.基于dataframe的日期数据列生成日期索引(dates in ...

  6. Matplotlib可视化散点图、配置X轴为对数坐标、并使用线条(line)连接散点图中的数据点、基于分组变量配置数据点的颜色(connecting two coordinates with line

    Matplotlib可视化散点图.配置X轴为对数坐标.并使用线条(line)连接散点图中的数据点.基于分组变量配置数据点的颜色(connecting two coordinates with line ...

  7. Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))

    Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用)) 目录 数据增强步骤 数据增强实现代码 ...

  8. 基于Socket的游戏服务器通信框架的设计与实现

    博客地址:blog.liujunliang.com.cn 开发工具:VS2017.Unity2017 本文介绍使用Socket/TCP来开发客户端与服务器端通信框架 博主使用过PhotonServer ...

  9. java udp包_基于UDP协议的数据包收发程序(代码+报告)Java

    [实例简介] 设计要求: 1)按照UDP协议数据包发送方式实现用户端之间的通信. 2)统计包的发送和接收数,计算数据包的丢失数. 3)设计美观易用的图形界面. [实例截图] [核心代码] 基于UDP协 ...

最新文章

  1. C++拾趣——使用多态减少泛型带来的代码膨胀
  2. 侠客风云传服务器维护,《侠客风云传online》4月20日服务器数据互通公告
  3. 【精辟】人工智能先锋人物杰夫·辛顿说:“深度学习将无所不能”
  4. Web Bundler CheatSheet, 选择合适的构建打包工具
  5. solidworks操作记录
  6. 分布式理论(一) - CAP定理
  7. python网页编程测试_李亚涛:python编写友情链接检测工具
  8. PTA浙大版python程序设计题目集--第2章-2 计算分段函数[1] (10 分)
  9. android setContentView处理流程
  10. Jozky 刷题目录
  11. JS 给某个对象添加专属方法
  12. LeetCode 1930. 长度为 3 的不同回文子序列(计数)
  13. python语言哪个人创造_Python语言是由哪个人创造的?
  14. C++面试题-面向对象-构造函数和析构函数
  15. Android应用保活方案的另类出路,让你应用长生不老,实战案例
  16. 话说Ctrl键的终极含义
  17. Hive3.1.2安装指南
  18. 一种通用的Qt数据库接口操作方法
  19. bat脚本的常用特殊符号
  20. mfc连接oracle12c,MFC ADO连接Oracle12c数据库 类库文件

热门文章

  1. 路由器性能测试工具_小米路由器AX3600与AX1800 MESH 实测
  2. java p=x,Java-Tutorial/20、javac和javap.md at master · allenchenx/Java-Tutorial · GitHub
  3. matlab错误打印,MATLAB中数据输出格式出现错误?
  4. opencv 计数后不动了 训练模型时_用OpenCV,深度学习和Python进行年龄识别
  5. 从Http的连接到WebSocket
  6. Spring Boot读取application.yaml属性
  7. 【OJ1768】最大子矩阵
  8. linux perl开发工具,专家推荐 几款常用Perl开发工具
  9. java能字典_适用于Java的任何字典定义API?
  10. java 求集合真子集_【每日打卡】新高一数学必修打卡第二天教学视频—集合的基本运算...