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

时间:2018-01-09 16:21:54

标签: java spring design-patterns

我有一个消息传递生成器(RabbitMQ),根据我必须发送的消息类型,我需要在运行时更改路由密钥和交换。

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

例如:

    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 个答案:

答案 0 :(得分:1)

不要为此方案创建多个类。

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

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