BeanFactory ApplicationContext 区别
从容器接口来看
- 到底什么是 BeanFactory
- 它是 ApplicationContext 的父接口
- 它才是 Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能
组合
—>意味着BeanFactory是ApplicationContext的成员变量
-
BeanFactory 能干点啥
- 表面上只有 getBean
- 实际上控制反转、基本的依赖注入、直至 Bean 的生命周期的各种功能, 都由它的实现类提供
-
ApplicationContext 比 BeanFactory 多点啥
- ApplicationContext 组合并扩展了 BeanFactory 的功能
- 国际化、通配符方式获取一组 Resource 资源、整合 Environment 环境、事件发布与监听
- 增加了一种代码之间解耦途径,
事件解耦
从容器实现来看
DefaultListableBeanFactory是BeanFactory最主要的一个实现类
FileSystemXmlApplicationContext
ClassPathXmlApplicationContext
AnnotationConfigApplicationContext
AnnotationConfigServletWebServerApplicationContext
这四个是 Application 的常见实现类,最重要的还是下面的两个,和Web开发相关的就可以用最后一个
AnnotationConfigServletWebServerApplicationContext
的配置类相对AnnotationConfigApplicationContext
的配置类要麻烦一点,
ServletWebServerFactory方法主要就是 构建一个Tomcat服务器
我们知道,Spring的Web层面的技术,它的核心在于DispatcherServlet(将来浏览器发来的请求或者是PostMan发来的请求,最终都入口点就是DispatcherServlet前控制器
),DispatcherServlet方法就是用来创建这个核心的Servlet(DispatcherServlet)。
但是光有tomcat内置服务器 和Servlet还是不够的,我们还需要将他们联系起来(将DispatcherServlet注册到Tomcat服务器上) 在注册的时候我们指定了一个 路径"/"它代表 所有请求的路径都先经过DispatcherServlet然后再由它去分发到相应的控制器中
@Configuration
publicclass WebConfig {
@Bean
public ServletWebServerFactory servletWebServerFactory(){
return new TomcatServletWebServerFactory();
}
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
@Bean
public DispatcherServletRegistrationBean registrationBean(DispatcherServlet dispatcherServlet) {
return new DispatcherServletRegistrationBean(dispatcherServlet, "/");
}
}