我将使用一个父上下文创建多个 Spring 上下文。以下是我将如何创建父上下文:
new ClassPathXmlApplicationContext(new String[] {"ApplicationContext/application.xml"})
我想通过以下方式创建每个父上下文:
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
configurer.setProperties(properties);
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(appContext);
context.addBeanFactoryPostProcessor(configurer);
context.setConfigLocation("ApplicationContext/beans.xml");
context.refresh();
这个想法是在每个子上下文中拥有多个具有相同 bean 层次结构的子上下文(DAO、服务、数据源、事务管理器等)。拥有多个上下文的原因是需要拥有多个不同的数据源(实际上每个应用程序上下文一个)。每个数据源的数据库结构都是相同的。所以,有一些问题。
- 拥有这样的上下文层次结构是否安全?例如,如果有 30 个子上下文?
- 跨子上下文 bean 可见性怎么样?比如说,我使用@Component注释声明了CustomerService bean,并带有几个自动装配的 DAO 依赖项。Spring 是否在特定子上下文中执行自动装配和其他 DI 操作?
- 另外,我将使用以下方法从子上下文中查找 bean: childContext.getBean(CustomerService.class); 我是否从这个特定的子上下文而不是其他子上下文中获得客户服务?我知道,弹簧单例是每个应用程序上下文的单例,但仍然不确定。
PS。还有另一种方法来处理此处描述的多个数据源。但就我而言,这种方法似乎不太方便。