[英]Qualifying Spring dependency injection for field from superclass
如何将我的webServiceTemplate
注入实现类中?
我的例子:
public abstract class AbstractConnector {
protected WebServiceTemplate webServiceTemplate;
protected Object send(Object message) {
return webServiceTemplate.marshalSendAndReceive();
}
}
在我的具体实现中,我webServiceTemplate
这样设置我的webServiceTemplate
。
public class MyConnector extends AbstractConnector {
@Resource(name = "myWebService")
private WebServiceTemplate webServiceTemplate;
}
但这不行。 如果我调用send()
,那么我将得到NPE,因为webServiceTemplate
为null。 如何在实现中设置此依赖关系,该依赖关系可以在send()
方法中访问?
最好尽可能避免注入场,这就是一个例子。 构造函数注入使这一过程变得简单:
public abstract class AbstractConnector {
private final WebServiceTemplate webServiceTemplate;
protected AbstractConnector(WebServiceTemplate webServiceTemplate) {
this.webServiceTemplate = webServiceTemplate;
}
}
@Service
public class MyConnector extends AbstractConnector {
@Inject // or @Autowired
public MyConnector(@Qualifier("myWebService") WebServiceTemplate webServiceTemplate) {
super(webServiceTemplate);
}
}
我不明白为什么在这里电场注入会变得如此简单:
public abstract class AbstractConnector {
protected WebServiceTemplate webServiceTemplate;
public void setWebServiceTemplate(WebServiceTemplate template) {
this.webServiceTemplate = template;
}
}
public class MyConnector extends AbstractConnector {
@Autowired("myWebService")
@Override
public void setWebServiceTemplate(WebServiceTemplate template) {
super.setWebServiceTemplate(template);
}
}
您可以使用method-lookup
:
您抽象类:
public abstract class AbstractConnector
{
private abstract WebServiceTemplate getWebServiceTemplate();
protected Object send(Object message)
{
return getWebServiceTemplate().marshalSendAndReceive();
}
您的配置:
<bean id="webServiceTemplate" scope="prototype" class="com.example.WebServiceTemplate" />
<bean id="connector" class="com.example.AbstractConnector"
<lookup-method name="webServiceTemplate" bean="webServiceTemplate" />
</bean>
如果调用getWebServiceTemplate()
方法,Spring会将您的抽象类连接起来以返回一个新的webServiceTemplate
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.