java - 存储类属性并在运行时加载的好方法是什么?

标签 java spring design-patterns

我有一个消息生产者(RabbitMQ),根据我必须发送的消息类型,我需要更改路由 key 并在运行时进行交换。

鉴于此,我实现了一种策略来加载具有特定属性的每个类,但这似乎不是一个好的解决方案。

例如:

    public class MyProducerStrategy1 extends RabbitMessagingProducer {

    private static final String ROUTING_KEY = "order1";
    private static final String EXCHANGE = "myexchange1";

    @Override
    String getRoutingKey() {
        return ROUTING_KEY;
    }

    @Override
    String getExchange() {
        return EXCHANGE;
    }

    @Override
    public void sendMessage(Message message) {
        super.sendMessage(message);
    }
}


public class MyProducerStrategy2 extends RabbitMessagingProducer {

    private static final String ROUTING_KEY = "fullfilment";
    private static final String EXCHANGE = "myexchange2";

    @Override
    String getRoutingKey() {
        return ROUTING_KEY;
    }

    @Override
    String getExchange() {
        return EXCHANGE;
    }

    @Override
    public void sendMessage(Message message) {
        super.sendMessage(message);
    }
}

public abstract class RabbitMessagingProducer implements MessagingProducerStrategy {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    abstract String getRoutingKey();

    abstract String getExchange();

    @Override
    public void sendMessage(Message message) {
        rabbitTemplate.convertAndSend(getExchange(), getRoutingKey(), message);
    }
}

有道理吗?或者还有另一种方法来加载属性并可能有一个类?

最佳答案

不要为此场景创建多个类。

  1. 根据消息从属性文件加载文件。

  2. 另一个选项是创建一个静态值映射,其中消息类型作为键,路由键作为值。根据消息类型从 map 中获取值。

关于java - 存储类属性并在运行时加载的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172498/

相关文章:

java - 异常(exception) - 我应该更喜欢日志库而不是 java.util.logging 吗?

java - 我可以使用 .xml < context-param > 作为 .as 类中的常量吗?

java - Spring Bean 初始化 - 通过 xml 作为字符串传递的日期不适用于步骤范围

java - Spring Security 4 无法在 Tomcat 7 上创建 bean FilterChain

java - Spring MVC 页面到页面导航不起作用

java - 何时使用成员变量与按组成设计?

java - 如何创建依赖类的单例实例?

java - 没有值插入时按钮 onclick 崩溃

java - 从另一个类中检索存储在泛型类中的对象

java - 我的 DAO 开始看起来一样了,建议补救设计模式?