我想知道是否有更好的方法来完成我遇到的情景。
我有一个Message类,其中包含代码,类型,消息正文和消息源的字段。唯一可选的字段是source,因此有两个构造函数 - 一个包含所有4个args,另一个只包含3个必需参数。
有一个用例,我想使用以下任何一条信息创建一条新消息:
为此,我使用了一个接口MessageHelper,它包含接受所需类型的原型方法(上图)。然后,Message类型具有构造函数,这些构造函数接受MessageHelper随后将从中推断出正确的消息字段的各种信息。
public Message(Message message) {
this.messageType = message.messageType;
this.messageCode = message.messageCode;
this.messageBody = message.messageBody;
this.source = message.source;
}
public Message(String messageCode) {
this(messageHelper.newMessage(messageCode));
}
并对消息助手impl的内部工作原理提供一些见解:
@Override
public Message newMessage(String messageCode, Object[] args, String source) {
MessageType messageType = getMessageType(messageCode);
String messageBody = messageSource.getMessage(messageCode, args, Locale.getDefault());
// messageSource is of type ResourceBundleMessageSource
return new Message(messageType, messageCode, messageBody, source);
}
@Override
public Message newMessage(String messageCode) {
return newMessage(messageCode, null, null);
}
我已根据需要为接口和bean创建了允许@Autowired
的impl类,但我不确定从Message类型访问MessageHelper实例的最佳方法。
目前Message类中有一个private static MessageHelper messageHelper;
字段,我从顶级项目的Message.setMessageHelper(...)
文件中调用@Configuration
。
但是,我想隐藏这个配置,理想情况下,它会在春天自动完成,而不会显式调用静态set方法。这是一个令人费解和有缺陷的思想过程和实施吗?洞察力和/或替代实施表示赞赏!
编辑:有一个包资源包括提供预定义的消息体和带有e代码的类型供参考
ERROR-CODE-1000=This is an error.
ERROR-CODE-1000.messageType=ERROR