В основном я хочу разбить приложение на 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
.
Любая идея, как я могу заставить это работать?