[英]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.