基于使用xml bean配置的条件进行自动装配

时间:2016-09-12 17:22:25

标签: spring

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

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

enter image description here

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

    package org.pradeep.core;

    public class 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然后根据它的值(如果值为'email',那么名为'email'的bean应该连接其他名称为'sms'的bean应该连线。)msg应该连线

请帮我解决问题。

3 个答案:

答案 0 :(得分:1)

我认为最好的方法是为SenderUser实现BeanFactory。看看this post的想法。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用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"/>
&#13;
&#13;
&#13;