首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bean生命周期- afterPropertiesSet()

Bean生命周期- afterPropertiesSet()
EN

Stack Overflow用户
提问于 2020-03-24 17:42:23
回答 1查看 503关注 0票数 0

我正在尝试创建扩展org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapterCustomWebServiceMessageReceiverHandlerAdapter

WebServiceMessageReceiverHandlerAdapter扩展了实现InitializingBean的抽象WebServiceMessageReceiverObjectSupport

我有一个问题,因为我不明白为什么我必须在自定义处理程序中调用afterPropertiesSet()。在没有调用这个方法的情况下,我得到一个错误:“工厂消息是必需的”。但是,这个方法是在抽象类中调用的,所以我的自定义处理程序应该从抽象类运行afterPropertiesSet()。如果你知道解决方案,请让我知道。非常感谢。

编辑:这是我的CustomWebServiceMessageReceiverHandlerAdapter

代码语言:javascript
复制
public class CustomWebServiceMessageReceiverHandlerAdapter extends WebServiceMessageReceiverHandlerAdapter {

@Override
protected void handleInvalidXmlException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler,
        InvalidXmlException ex) throws Exception {
    //code
}

@Override
public void afterPropertiesSet() {

}
}

WebServiceMessageReceiverHandlerAdapterWebServiceMessageReceiverObjectSupport来自Spring Framework

代码语言:javascript
复制
public class WebServiceMessageReceiverHandlerAdapter extends WebServiceMessageReceiverObjectSupport{}

没有afterPropertiesSet()

代码语言:javascript
复制
public abstract class WebServiceMessageReceiverObjectSupport implements InitializingBean {

    private WebServiceMessageFactory messageFactory;

    /** Returns the {@code WebServiceMessageFactory}. */
    public WebServiceMessageFactory getMessageFactory() {
        return messageFactory;
    }

    /** Sets the {@code WebServiceMessageFactory}. */
    public void setMessageFactory(WebServiceMessageFactory messageFactory) {
        this.messageFactory = messageFactory;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Assert.notNull(messageFactory, "messageFactory is required");
    }

现在,当我从自定义处理程序中删除afterPropertiesSet()时,抛出了一个异常。在我看来,我对bean的生命周期一无所知。

EN

回答 1

Stack Overflow用户

发布于 2020-03-25 19:33:15

我对你的具体情况不太确定。通常,如果bean实现了InitializingBean以及afterPropertiesSet,则在实例化bean实例和Spring注入所有@Autowired属性/值之后调用此方法。

在您的特定情况下,需要确保设置(通过继承)类的messageFactory属性。通常这是由Spring完成的,如果您为自动装配提供了合适的setter:

代码语言:javascript
复制
@Autowired
@Override
public void setMessageFactory(WebServiceMessageFactory messageFactory) {
  super.setMessageFactory(messageFactory);
}

如果您在不调用super.afterPropertiesSet()的情况下重写afterPropertiesSet,那么创建bean将会起作用,因为超级实现的断言将被跳过。但是您很可能会遇到问题,因为messageFactory属性没有正确初始化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60828423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档