1、web.xml必须配置ContextLoaderListener监听器以及Spring容器上下文配置文件:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2、Spring容器上下文配置文件至少需要context命名空间及基础包扫描:
<?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-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com"/>
</beans>
3、获取Spring容器上下文:
1)直接注入:
@Autowired
private ApplicationContext ac;
2)Spring容器上下文需要通过ServletContext获取,所以需要先获取到ServletContext:
public void getApplicationContext(HttpSession session) {
ServletContext context = session.getServletContext();
ApplicationContext ac = (ApplicationContext) context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
DemoController controller = ac.getBean("demoController", DemoController.class);
System.out.println(controller);
}
3)使用WebApplicationContextUtils获取:
public void getApplicationContext(HttpSession session) {
ServletContext context = session.getServletContext();
ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(context);
DemoController controller = ac.getBean("demoController", DemoController.class);
System.out.println(controller);
}
4)通过ApplicationContextAware接口获取:
1.编写类实现ApplicationContextAware接口并交给spring管理:
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public ApplicationContext getApplicationContext() {
return applicationContext;
}
}
2.在需要上下文的类中注入这个类,获取spring容器上下文:
@Autowired
private ApplicationContextProvider applicationContextProvider;
@RequestMapping("/getApplicationContext")
public void getApplicationContext(HttpSession session) {
ApplicationContext ac = applicationContextProvider.getApplicationContext();
DemoController controller = ac.getBean("demoController", DemoController.class);
System.out.println(controller);
}
5)Springboot项目获取Spring容器上下文:
@SpringBootApplication
public class SpringbootDemoApplication {
private static ApplicationContext ac;
public static void main(String[] args) {
ac = SpringApplication.run(SpringbootDemoApplication.class, args);
}
@Bean
public ApplicationContext getApplicationContext() {
return ac;
}
}