gpt4 book ai didi

java - Bean 生命周期 - afterPropertiesSet()

转载 作者:行者123 更新时间:2023-12-01 17:48:19 25 4
gpt4 key购买 nike

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

WebServiceMessageReceiverHandlerAdapter 扩展了实现 InitializingBean 的抽象 WebServiceMessageReceiverObjectSupport

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

编辑:这是我的CustomWebServiceMessageReceiverHandlerAdapter:

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

public class WebServiceMessageReceiverHandlerAdapter extends WebServiceMessageReceiverObjectSupport{}

没有 afterPropertiesSet()

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的生命周期。

最佳答案

我不确定您的具体情况。一般来说,如果一个 bean 实现了 InitializingBean ,因此 afterPropertiesSet 会在 bean 实例实例化之后以及 Spring 注入(inject)所有 @Autowired 属性之后调用此方法/值。

在您的具体情况下,您需要确保设置(通过继承)类的 messageFactory 属性。通常,如果您为 Autowiring 提供合适的 setter,则这由 Spring 完成:

@Autowired
@Override
public void setMessageFactory(WebServiceMessageFactory messageFactory) {
super.setMessageFactory(messageFactory);
}

如果您覆盖 afterPropertiesSet 而不调用 super.afterPropertiesSet(),则 bean 的创建将起作用,因为 super 实现的断言将被跳过。但是,由于 messageFactory 属性未正确初始化,您可能会进一步遇到问题。

关于java - Bean 生命周期 - afterPropertiesSet(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60828423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com