0
我有以下的非启动Spring应用程序,耳2战,如何实现相同的弹簧启动应用程序父应用程序上下文在春季启动
在服务层应用程序:
@Configuration
@ComponentScan("")
@Import({..})
public class BaseConfig implements ApplicationContextAware {
private ApplicationContext parentContext;
@Bean(name = "earParentContext")
public ApplicationContext parentContextKey() {
return this.parentContext;
}
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
this.parentContext = applicationContext;
}
}
beanRefContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<context:component-scan resource-pattern="BaseConfig.class" base-package="com.pkg.sa.config"
annotation-config="true" />
</beans>
WAR1初始化程序与ParentContext
public class War1Initializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext container) throws ServletException {
ServletRegistration.Dynamic war1Servlet = container.addServlet("war1Dispatcher", new DispatcherServlet());
war1Servlet.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
war1Servlet.setInitParameter("parentContextKey", "earParentContext");
war1Servlet.setLoadOnStartup(1);
war1Servlet.addMapping("/");
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.setDisplayName("AbcNx");
// Registers the application configuration with the root context
BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance("classpath:beanRefContext.xml");
BeanFactoryReference parentContextRef = locator.useBeanFactory("earParentContext");
ApplicationContext parentContext = (ApplicationContext) parentContextRef.getFactory();
rootContext.setParent(parentContext);
rootContext.register(War1WebMvcConfigurer.class);
}
}
WAR2初始化程序与ParentContext
public class War2Initializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext container) throws ServletException {
ServletRegistration.Dynamic war2Servlet = container.addServlet("war2Dispatcher", new DispatcherServlet());
war2Servlet.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
war2Servlet.setInitParameter("parentContextKey", "earParentContext");
war2Servlet.setLoadOnStartup(1);
war2Servlet.addMapping("/");
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.setDisplayName("AbcNx");
// Registers the application configuration with the root context
BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance("classpath:beanRefContext.xml");
BeanFactoryReference parentContextRef = locator.useBeanFactory("earParentContext");
ApplicationContext parentContext = (ApplicationContext) parentContextRef.getFactory();
rootContext.setParent(parentContext);
rootContext.register(War2WebMvcConfigurer.class);
}
}
谢谢,稍后会尝试一下..并更新。 –