繁体   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