В основном я хочу разбить приложение на 2 части. Каждая часть имеет свои собственные вещи безопасности и собственные @Controller. @Services должны быть доступны из обеих частей.
Поэтому я подумал, что я должен получить 2 DispatcherServlet. Один прослушивает /admin/* а второй слушает все остальное (/). Каждый из них будет иметь свой собственный AnnotationConfigWebApplicationContext поэтому у меня может быть отдельное сканирование компонентов для @Controller s.
И потому, что весна загрузка обеспечивает один DispatcherServlet прослушивает / из коробки, я подумал, что я могу просто добавить второй:
@Configuration
public class MyConfig {
@Bean(name="myDS")
public DispatcherServlet myDS(ApplicationContext applicationContext) {
AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();
webContext.setParent(applicationContext);
webContext.register(MyConfig2.class);
// webContext.refresh();
return new DispatcherServlet(webContext);
}
@Bean
public ServletRegistrationBean mySRB(@Qualifier("myDS") DispatcherServlet dispatcherServlet) {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(dispatcherServlet);
servletRegistrationBean.addUrlMappings("/admin/*");
servletRegistrationBean.setName("adminServlet");
return servletRegistrationBean;
}
}
Класс MyConfig2 имеет только @Configuration и @ComponentScan. Внутри того же пакета есть @Controller.
При запуске приложения я вижу, что второе сопоставление сервлета регистрируется, а @Controller - нет. Кроме того, теперь я могу получить доступ ко всем @Controllers из / и /admin.
Любая идея, как я могу заставить это работать?