2016-09-12 62 views
1

我正在使用spring配置文件(xml配置)進行S​​pring自動配線。我想根據條件注入bean。 讓我進入細節。基於使用xml bean配置時的條件的自動裝配

  • 有兩類 'EmailSender' 和 'SmsSender' 實現了這個接口IMessageSender。 Beans在配置文件中爲這兩個類配置。

enter image description here

  • 我有另一類SenderUser其具有在它IMessageSender類型的實例變量。

    package org.pradeep.core;

    public class SenderUser {0} {0} {0}私人字符串名稱; 私人字符串類型;

    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豆()。這意味着首先應該設置SernderUser.type,然後根據它的值(如果值是'email',那麼應該使用名爲'email'的bean連線,否則應該連接名爲'sms'的bean。)應該連接msg 。

請幫我解決問題。

回答

1

我相信最好的方法是爲SenderUser實現BeanFactory。看看this post的想法。

0

接口不能被注入,它們不是bean /實例。

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"/>