【问题标题】:Autowire based on a condition when xml bean configuration is used使用 xml bean 配置时根据条件自动装配
【发布时间】:2017-01-20 04:50:20
【问题描述】:

我正在使用 spring 配置文件(xml 配置)进行 Spring 自动接线。我想根据条件注入 bean。 让我详细介绍一下。

  • 有两个类“EmailSender”和“SmsSender”实现了接口IMessageSender。在配置文件中为这两个类配置了 Bean。

  • 我有另一个类SenderUser,其中有一个IMessageSender 类型的实例变量。

    包 org.pradeep.core;

    公共类 SenderUser { 私有字符串名称; 私有字符串类型;

    private IMessageSender msg;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getType() {
        return Type;
    }
    
    public void setType(String type) {
        Type = type;
    }
    
    public IMessageSender getMsg() {
        return msg;
    }
    
    public void setMsg(IMessageSender msg) {
        this.msg = msg;
    }
    

    }

    • 我想根据 SenderUser.getType() 的值将IMessageSender 注入 SenderUser 的 bean。这意味着首先应设置 SernderUser.type,然后根据它的值(如果值为“电子邮件”,则应连接名称为“电子邮件”的 bean,否则应连接名称为“短信”的 bean。)味精应该连接.

请帮我解决问题。

【问题讨论】:

    标签: spring


    【解决方案1】:

    我相信最好的方法是为 SenderUser 实现一个 BeanFactory。看看this post 的想法。

    【讨论】:

      【解决方案2】:

      接口不能注入,它们不是 bean/实例。

      【讨论】:

        【解决方案3】:

        你可以使用SPEL

        <bean id="user" class="SenderUser" autowire="byType">
          <property name="type" value="email"/>
          <property name="msg" value="#{type != null && type == 'email' ? email : sms}"/>
        </bean>
        
        <bean id="email" class="EmailSender"/>
        <bean id="sms" class="SmsSender"/>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-09
          • 1970-01-01
          • 1970-01-01
          • 2018-09-18
          • 1970-01-01
          • 2014-11-05
          • 2018-12-24
          • 1970-01-01
          相关资源
          最近更新 更多