标签:Object Java String object 遍历 AOP i18n obj name
需求背景
国际化多语言配置。
相较于常规的方法,这次采取了切面的方式,来完成所有字段->不同语言的映射。
大致逻辑:
-
按常规的国际化,写一个获取语言的方法:getMsg(String code);
-
写一个深层遍历对象的方法traverseObject(Object obj),通过反射,获取所有类型为字符串的字段,并实现对字段的重新赋值;(此处需要额外处理对象内部有List和Map的情况)
以上,就完成了国际化的基础:对某个对象进行遍历,获取其字符串属性的值,检查配置文件中是否有该值对应的国际化语言,有的话就重新赋值
eg.
* 配置文件中: xxModule.name = 名字
* 业务逻辑层中: obj.setName("xxModule.name")
* 然后通过遍历对象traverseObject(obj),获取到obj.name,然后检查配置文件中是否有对应的语言,getMsg(obj.name),有的话对该属性重新赋值
-
AOP切面的配置:
3.1 定义一个注解
3.2 定义一个切面,写一个@AfterReturning的方法,并且限定该方法只对上面定义的注解生效
3.3 @AfterReturning的方法中写入步骤1和步骤2的逻辑实现.
-
把该注解加在需要做国际化的controller方法上
这样就完成了切面+国际化的配置,有时候觉得不那么靠谱,可能是我没想到更好的处理方法,大家谨慎参考。
!!!支持的场景有限:支持list,map,object(直接的object对象或者自定义class的实例,不支持单纯的string类型。
支持的几种返回值类型示例:
List: ["aaa","bbb","ccc"]
List
标签:Object,
Java,
String,
object,
遍历,
AOP,
i18n,
obj,
name
From: https://www.cnblogs.com/northwest332/p/18079981