簡體   English   中英

對超類中的字段進行合格的Spring依賴注入

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM