Жизненный цикл бина - afterPropertiesSet () - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать CustomWebServiceMessageReceiverHandlerAdapter, который расширяет org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.

WebServiceMessageReceiverHandlerAdapter расширяет абстрактный WebServiceMessageReceiverObjectSupport, который реализует InitializingBean.

У меня проблема, потому что я не понимаю, почему я должен вызывать afterPropertiesSet() в пользовательском обработчике. Я получаю сообщение об ошибке, не вызывая этот метод: «требуется фабричное сообщение». Но этот метод вызывается в абстрактном классе, поэтому мой пользовательский обработчик должен запускать afterPropertiesSet() из абстрактного класса. Если вы знаете решение, дайте мне знать. Большое спасибо.

edit: Это мои 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() {

}
}

WebServiceMessageReceiverHandlerAdapter и WebServiceMessageReceiverObjectSupport из 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() из моего пользовательского обработчика, возникает исключение. По-моему, я ничего не понимаю в жизненном цикле бобов.

1 Ответ

0 голосов
/ 25 марта 2020

Я не уверен в вашем конкретном случае c. В общем, если бин реализует InitializingBean и, следовательно, afterPropertiesSet, этот метод вызывается после создания экземпляра бина и после того, как Spring внедрил все @Autowired свойства / значения.

В вашем конкретном случае c вам нужно убедиться, что установлено свойство messageFactory вашего класса (через наследование). Обычно это делается Spring, если вы предоставляете подходящий установщик для автопроводки:

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

Если вы переопределите afterPropertiesSet без вызова super.afterPropertiesSet(), создание компонента будет работать, так как утверждение супер реализации реализуется пропускаются. Но вы, вероятно, столкнетесь с проблемами в дальнейшем, поскольку свойство messageFactory не инициализировано должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...