Java类型

时间:2016-11-29 17:32:21

标签: java spring spring-boot

我想知道是否有更好的方法来完成我遇到的情景。

我有一个Message类,其中包含代码,类型,消息正文和消息源的字段。唯一可选的字段是source,因此有两个构造函数 - 一个包含所有4个args,另一个只包含3个必需参数。

有一个用例,我想使用以下任何一条信息创建一条新消息:

  • 错误代码(字符串)
  • 错误代码(内部枚举类型)
  • 特定内部类型:A
  • 特定框架错误:B
  • 特定框架错误:C
  • 通用框架错误:D

为此,我使用了一个接口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

0 个答案:

没有答案