我正在使用spring配置文件(xml配置)进行Spring自动布线。我想根据条件注入bean。 让我详细介绍一下。
EmailSender
”和“SmsSender
”实现了接口IMessageSender
。在配置文件中为这两个类配置了Bean。我有另一个类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;
}
}
IMessageSender
注入到SenderUser的bean中。这意味着应该先设置第一个SernderUser.type然后根据它的值(如果值为'email',那么名为'email'的bean应该连接其他名称为'sms'的bean应该连线。)msg应该连线请帮我解决问题。
答案 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;