Я пытаюсь включить Spring-MVC в существующем приложении, имеющем веб-сервер.У меня есть два класса с @Configuration
, один со всеми компонентами из приложения и один, где я включил mvc, используя @EnableWebMvc
.Чем перед запуском джети сервера я установил обработчик добавив DispatcherServlet
.Проблема в том, что после установки контекста пружины мне нужно получить от него бин, но когда я вызываю обновление для контекста, я получаю:
Factory method 'resourceHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No ServletContext set
Я пытаюсь инициировать контекст для получения бина не из пружиныкласс, потому что это унаследованный класс:
private void initSpringAppContext() {
this.springAppContext = new AnnotationConfigWebApplicationContext();
((AnnotationConfigWebApplicationContext) this.springAppContext).register(SpringConfiguration.class);
((AnnotationConfigWebApplicationContext) this.springAppContext).refresh();
}
SpringWebConfiguration:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.whitelist.manager.resources")
public class SpringWebConfiguration implements WebMvcConfigurer {
}
SpringConfiguration:
@Configuration
@EnableScheduling
@EnableTransactionManagement
@ComponentScan({"com.netoptics", "com.whitelist.manager", "com.websilicon", "com.wsnms.server", "com.anue", "com.wsnms"})
public class SpringConfiguration {
@Bean
.....
@Bean
.....
}
web.xml:
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.netoptics.server.SpringWebConfiguration</param-value>
</init-param>
</servlet>
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.netoptics.server.SpringConfiguration</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/v2/*</url-pattern>
</servlet-mapping>
Проблема в этой строке: springAppContext.refresh();
Если я удаляю эту и пытаюсь позвонить springAppContex.getBean()
я получаю:
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
ОБНОВЛЕНИЕ: Попытка изменить конфигурацию Java с XML, та же ошибка.Когда я пытаюсь получить контекст весны (SpringConfiguration.class
).Так что я не могу получить корневой контекст для доступа к бинам.Что я делаю не так в initSpringAppContext()