Добрый день!
По определению область действия Application привязана к ServletContext. Следовательно, бин, объявленный с областью видимости Application, может быть виден в нескольких DispatcherServlet. Но на практике не работает.
1. Определяю бин в контексте первого DispatcherServlet
@Configuration
@EnableWebMvc
@ComponentScan
public class MainWebConfig {
@Inject
ApplicationContext context;
@Bean
@ApplicationScope
Printer printer()
{
return new Printer();
}
}
2. Инициализирую первый DispatcherServlet
public class MainPackageInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses()
{
return null;
}
@Override
protected Class<?>[] getServletConfigClasses()
{
return new Class<?>[] {MainWebConfig.class};
}
@Override
protected String[] getServletMappings()
{
return new String[] {"/main/*"};
}
@Override
protected String getServletName()
{
return "main";
}
}
3. Инициализирую второй DispatcherServlet
public class SecondPackageInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses()
{
return null;
}
@Override
protected Class<?>[] getServletConfigClasses()
{
return new Class<?>[] {SecondWebConfig.class};
}
@Override
protected String[] getServletMappings()
{
return new String[] {"/second/*"};
}
@Override
protected String getServletName()
{
return "second";
}
}
4. В контроле из второго DispatcherServlet, использую бин, определенный в контексте первого DispatcherServlet.
@Controller
@RequestMapping("/")
public class SecondController {
@Autowired
Printer printer;
@GetMapping
String getSecond()
{
printer.print();
return "second";
}
}
Выдает исключение, что бин printer не найден!