首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何“注册”新元素?

如何“注册”新元素?
EN

Stack Overflow用户
提问于 2016-07-10 21:14:34
回答 0查看 24关注 0票数 0

我使用JAXB作为一种简单的方法来配置我的应用程序,并在启动时验证配置参数。这在大多数情况下都很有效。现在我想让我的配置更灵活一点,我想知道如何使用可互换的元素/对象:

示例(dev环境):

代码语言:javascript
复制
<email-gateway user="abc" pass="123456">
    <server-list>
        <server name="lorem"/>
        <server name="ipsum"/>
    </server-list>
</email-gateway>

示例(生产):

代码语言:javascript
复制
<email-gateway user="abc" pass="123456">
    <dns-lookup name="gateway.server" type="MX" />
</email-gateway>

示例(产品扩展):

代码语言:javascript
复制
<email-gateway user="abc" pass="123456">
    <round-robin>
        <dns-lookup name="gateway.server" type="MX" />
    </round-robin>
</email-gateway>

Java代码(简化):

代码语言:javascript
复制
public class EmailGateway {
    @XmlAttribute(name="user")
    private String _user;

    @XmlAttribute(name="pass")
    private String _pass;

    @XmlElement(name="server-list")
    private ServerList _serverList;

    boolean sendMail(String to, String subject, String body) {
        for (Server server : _serverList.servers()) {
            if( server.sendMail(_user, _pass, to, subject, body) ) {
                return true;
            }
        }

        return false;
    }
}

我们的想法是为开发环境设置一个简单的(固定的)设置,而生产环境需要一些灵活性。因为服务器列表可以更改,所以应该自动检索它。

更好的是第二种方法。<round-robin>将负责每次从列表中返回一个不同的服务器,以避免过度使用相同的服务器(主要是第一个)。

由于EmailGateway类不需要知道ServerList的实现,因此我希望通过仅更改配置XML来使其更加灵活。否则,当我使用不同的算法来检索服务器列表时(例如,web服务或类似JNDI lookup的东西),我将不得不使用ServerList更改所有类。

这个是可能的吗?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38292256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档