У меня есть приложение с двумя контекстами. Parent для веб-независимой бизнес-логики и ChildContext (неявно созданный диспетчерским сервлетом) для веб-логики.
Моя установка выглядит так
@Configuration
public class BusinessConfig {
@Bean
public ObjectMapper jacksonMapper() { return new ObjectMapper() }
}
а также
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Autowired
private ObjectMapper objectMapper; // <- is null for some reason
@Override
public configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper); // <- bang!
messageConverters.add(converter);
}
}
Мне нужен сопоставитель объектов в родительском контексте, так как я использую его также в конфигурации безопасности. Но может ли кто-нибудь объяснить мне, почему @Autowired objectMapper имеет значение null? Он создан в родительском контексте (тот факт, что родитель существует, даже регистрируется Spring при запуске). Также @Autowired по умолчанию имеет required=true, поэтому он не должен взрываться в методе configure (он должен был взорваться при построении контекста, если по какой-то причине bean-компонента не было).
Мне кажется, что весной может возникнуть проблема с жизненным циклом - в том смысле, что он сначала вызывает переопределенные методы, а затем @Autowires зависимости... Я также пытался @Autowire BusinessConfig (должен быть совершенно законным в соответствии с документации - результат был тот же (нулевой)).
Что я должен сделать, чтобы заставить это работать?
Заранее спасибо!
ИЗМЕНИТЬ – ОБНАРУЖЕНА ПРОБЛЕМА
Я нашел проблему. К сожалению, это не имело ничего общего ни с WebMvcConfigurerAdapter, ни с @Configuration. Это было вызвано преждевременной инициализацией контекста, вызванной отсутствием статического модификатора для propertyPlaceholderConfigurer... Я создал проблему в jira ядра Spring (https://jira.spring.io/browse/SPR-14382)
web.xml
в JavaConfig? там мы можем видеть, какWeb Layer Context
иApplication Layer Contex
относятся к основной точке доступа - person Manuel Jordan   schedule 17.06.2016Web Layer Context
иApplication Layer Context
через JavaConfig, этот файл должен быть заменойweb.xml
, без этого сообщество не сможет вам помочь. - person Manuel Jordan   schedule 20.06.2016