Spring的核心类: BeanFactory, ApplicationContext 笔记241103
Spring的核心类: BeanFactory, ApplicationContext, ConfigurableApplicationContext, WebApplicationContext, WebServerApplicationContext, ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, XmlWebApplicationContext, AnnotationConfigServletWebServerApplicationContext
在Spring框架中,BeanFactory、ApplicationContext、ConfigurableApplicationContext、WebApplicationContext、WebServerApplicationContext、ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebApplicationContext、AnnotationConfigServletWebServerApplicationContext等概念各自扮演着重要的角色,它们之间既有联系又有区别。以下是对这些概念的详细解释:
-
BeanFactory
定义:BeanFactory是Spring框架中的基础容器接口,提供了配置框架和基本的功能,主要用于访问Spring容器中的bean。
特点:在BeanFactory中,bean的实例化是延迟的,即只有在第一次获取bean时才会进行实例化。
主要方法:getBean(String beanName),该方法根据bean的名称从容器中返回对应的bean。 -
ApplicationContext
定义:ApplicationContext是BeanFactory的子接口,提供了更多面向应用的功能,是Spring框架中更高级的容器。
特点:ApplicationContext在初始化时会实例化所有的单例bean,并提供了事件传播、国际化支持、资源访问等高级功能。
主要实现类:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext等。
继承关系:ApplicationContext继承了BeanFactory接口,并扩展了其功能。 -
ConfigurableApplicationContext
定义:ConfigurableApplicationContext是ApplicationContext的子接口,提供了更多的配置选项和生命周期管理方法。
特点:ConfigurableApplicationContext增加了刷新容器、关闭容器、设置上下文ID等方法,使得应用程序在运行时能够动态地修改和管理应用上下文。
主要方法:refresh()和close(),分别用于重新加载配置和关闭应用程序上下文。 -
WebApplicationContext
定义:WebApplicationContext是专门为Web应用程序设计的ApplicationContext接口。
特点:WebApplicationContext能够访问Web应用程序的ServletContext对象,允许bean访问Web应用程序的环境信息。此外,它还定义了一些特定于Web应用的bean,如控制器、视图解析器等。
主要实现类:XmlWebApplicationContext和AnnotationConfigWebApplicationContext等。 -
WebServerApplicationContext
定义:WebServerApplicationContext是实现了ApplicationContext接口的接口,用于创建和管理嵌入式Web容器的生命周期。
特点:WebServerApplicationContext是SpringBoot针对嵌入式Web容器扩展的IOC容器接口,它允许应用程序在运行时动态地管理嵌入式Web容器。
主要方法:getWebServer(),用于获取当前应用的嵌入式Web容器实例。 -
ClassPathXmlApplicationContext和FileSystemXmlApplicationContext
定义:这两个类都是ApplicationContext接口的实现类,用于从XML配置文件中加载Spring容器。
特点:ClassPathXmlApplicationContext默认从类路径加载配置文件,而FileSystemXmlApplicationContext默认从文件系统中装载配置文件。- ClassPathXmlApplicationContext默认从类路径加载配置文件。
- FileSystemXmlApplicationContext默认从文件系统中装载配置文件。
-
XmlWebApplicationContext
定义:XmlWebApplicationContext是WebApplicationContext接口的一个实现类。
特点:它使用XML配置文件来定义和配置Web应用程序中的bean。 -
AnnotationConfigServletWebServerApplicationContext
定义:AnnotationConfigServletWebServerApplicationContext是SpringBoot整合WebMvc场景的IOC容器最终落地实现。
特点:它支持注解驱动的配置方式,能够扫描和注册注解配置类,并创建嵌入式Web容器来支持WebMvc应用程序的运行。
综上所述,这些概念和类在Spring框架中各自扮演着不同的角色,它们共同构成了Spring框架的核心容器体系。通过理解这些概念和类的关系与特点,可以更好地使用Spring框架来开发和管理Java应用程序。
1. BeanFactory
- 定义:BeanFactory是Spring框架中的基础容器接口,提供了配置框架和基本的功能,主要用于访问Spring容器中的bean。
- 特点:在BeanFactory中,bean的实例化是延迟的,即只有在第一次获取bean时才会进行实例化。
- 主要方法:getBean(String beanName),该方法根据bean的名称从容器中返回对应的bean。
2. ApplicationContext
- 定义:ApplicationContext是BeanFactory的子接口,提供了更多面向应用的功能,是Spring框架中更高级的容器。
- 特点:ApplicationContext在初始化时会实例化所有的单例bean,并提供了事件传播、国际化支持、资源访问等高级功能。
- 主要实现类:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext等。
- 继承关系:ApplicationContext继承了BeanFactory接口,并扩展了其功能。
3. ConfigurableApplicationContext
- 定义:ConfigurableApplicationContext是ApplicationContext的子接口,提供了更多的配置选项和生命周期管理方法。
- 特点:ConfigurableApplicationContext增加了刷新容器、关闭容器、设置上下文ID等方法,使得应用程序在运行时能够动态地修改和管理应用上下文。
- 主要方法:refresh()和close(),分别用于重新加载配置和关闭应用程序上下文。
4. WebApplicationContext
- 定义:WebApplicationContext是专门为Web应用程序设计的ApplicationContext接口。
- 特点:WebApplicationContext能够访问Web应用程序的ServletContext对象,允许bean访问Web应用程序的环境信息。此外,它还定义了一些特定于Web应用的bean,如控制器、视图解析器等。
- 主要实现类:XmlWebApplicationContext和AnnotationConfigWebApplicationContext等。
5. WebServerApplicationContext
- 定义:WebServerApplicationContext是实现了ApplicationContext接口的接口,用于创建和管理嵌入式Web容器的生命周期。
- 特点:WebServerApplicationContext是SpringBoot针对嵌入式Web容器扩展的IOC容器接口,它允许应用程序在运行时动态地管理嵌入式Web容器。
- 主要方法:getWebServer(),用于获取当前应用的嵌入式Web容器实例。
6. ClassPathXmlApplicationContext和FileSystemXmlApplicationContext
- 定义:这两个类都是ApplicationContext接口的实现类,用于从XML配置文件中加载Spring容器。
- 特点:ClassPathXmlApplicationContext默认从类路径加载配置文件,而FileSystemXmlApplicationContext默认从文件系统中装载配置文件。
- ClassPathXmlApplicationContext默认从类路径加载配置文件。
- FileSystemXmlApplicationContext默认从文件系统中装载配置文件。
7. XmlWebApplicationContext
- 定义:XmlWebApplicationContext是WebApplicationContext接口的一个实现类。
- 特点:它使用XML配置文件来定义和配置Web应用程序中的bean。
8. AnnotationConfigServletWebServerApplicationContext
- 定义:AnnotationConfigServletWebServerApplicationContext是SpringBoot整合WebMvc场景的IOC容器最终落地实现。
- 特点:它支持注解驱动的配置方式,能够扫描和注册注解配置类,并创建嵌入式Web容器来支持WebMvc应用程序的运行。
Spring框架的核心类代表了其最基本的组件和功能,这些类共同构成了Spring框架的基石。以下是一些关键的Spring核心类及其功能概述:
-
BeanFactory:
- 是Spring框架的基础容器接口,提供了配置框架和基本的功能。
- 主要用于访问Spring容器中的bean,是IoC容器的基础。
- Bean的实例化是延迟的,即只有在第一次获取bean时才会进行实例化。
-
ApplicationContext:
- 是BeanFactory的子接口,提供了更多面向应用的功能。
- 在初始化时会实例化所有的单例bean,并提供了事件传播、国际化支持、资源访问等高级功能。
- 是Spring框架中更高级的容器,通常用于企业级应用开发。
-
ConfigurableApplicationContext:
- 是ApplicationContext的子接口,提供了更多的配置选项和生命周期管理方法。
- 增加了刷新容器、关闭容器、设置上下文ID等方法。
- 允许应用程序在运行时动态地修改和管理应用上下文。
-
BeanDefinition:
- 封装了Bean的所有属性信息。
- 当Spring容器启动时,会读取配置文件或扫描注解,解析出各个Bean的配置信息,并将其封装成对应的BeanDefinition对象。
- Spring容器根据BeanDefinition中的信息,实例化、初始化和配置Bean对象,然后将其放入容器中管理。
-
DefaultListableBeanFactory:
- 是整个Bean加载的核心部分,是Spring注册及加载Bean的默认实现。
- 继承了多个接口和类,综合了Bean注册、配置、获取等多种功能。
- 是Spring容器内部处理Bean注册和管理的核心组件。
-
BeanFactoryPostProcessor:
- 主要用于给Bean工厂新增BeanDefinition。
- 在Bean工厂实例化完毕但Bean还没有初始化时运行。
- 允许在Spring容器创建Bean之前对Bean的配置信息进行修改或增强。
-
Aware接口:
- 允许Bean意识到其所在的环境。
- 在Bean实例化后,Spring容器通过回调相应的Aware接口方法来提供一些特定的信息给Bean。
- 例如,EnvironmentAware接口允许Bean获取Spring容器的环境信息。
-
InitializingBean和DisposableBean接口:
- InitializingBean:定义了Bean初始化后的方法,允许在Bean初始化后执行一些自定义的初始化逻辑。
- DisposableBean:定义了Bean销毁前的方法,允许在Bean销毁前执行一些资源释放或清理工作。
-
BeanPostProcessor:
- 是Bean对象的后置处理器,生命周期在Bean对象初始化前后。
- 允许在Bean初始化前后对Bean进行一些自定义的处理,如属性注入、代理创建等。
- 是Spring AOP(面向切面编程)实现的关键组件之一。
这些核心类共同构成了Spring框架的IoC容器体系,为Java应用程序的开发提供了强大的支持和灵活性。通过理解这些类和它们之间的关系,可以更好地掌握Spring框架的使用和扩展方法。
在Spring框架中,BeanFactory、ApplicationContext、ConfigurableApplicationContext、WebApplicationContext、WebServerApplicationContext、ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebApplicationContext、AnnotationConfigServletWebServerApplicationContext等术语分别代表不同的接口和实现类,它们在Spring的IOC(Inversion of Control,控制反转)容器和应用上下文中扮演着重要的角色。以下是对这些术语的详细解释:
1. BeanFactory
- 定义:BeanFactory是Spring框架中最基础的容器接口,它提供了配置框架和基本的功能,用于访问应用程序中的bean。
- 主要方法:getBean(String beanName),根据bean名称从容器中返回对应的bean。
- 特点:BeanFactory在初始化容器时并没有实例化bean,而是在第一次访问到目标bean时才实例化该bean。
2. ApplicationContext
-
定义:ApplicationContext是BeanFactory的子接口,提供了更多面向应用的功能,如国际化支持、资源访问、事件传播等。
-
实现类:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext等。
-
特点:
- ApplicationContext继承了BeanFactory的所有功能,并进行了扩展。
- ApplicationContext在初始化上下文时会实例化所有的单例bean,而BeanFactory则不会。
3. ConfigurableApplicationContext
- 定义:ConfigurableApplicationContext是ApplicationContext的子接口,提供了更多的配置选项,允许应用程序在运行时动态地修改和管理应用上下文。
- 主要方法:refresh()和close(),用于启动、刷新和关闭ApplicationContext。
- 特点:ConfigurableApplicationContext包含了ApplicationContext的所有功能,并提供了修改bean定义、激活环境、注册shut-down hook等额外的能力。
4. WebApplicationContext
-
定义:WebApplicationContext是ApplicationContext的子接口,专门为Web应用程序设计。
-
特点:
- 继承了ApplicationContext的所有功能。
- 可以访问Web应用程序的ServletContext对象,允许bean访问Web应用程序的环境信息。
- 可以定义一些特定于Web应用的bean,如控制器(Controller)、视图解析器(ViewResolver)、处理器映射器(HandlerMapping)等。
5. WebServerApplicationContext
- 定义:WebServerApplicationContext是实现了ApplicationContext的接口,用于创建和管理嵌入式Web容器的生命周期。
- 主要方法:getWebServer(),返回当前应用的嵌入式Web容器实例。
- 特点:该接口是SpringBoot针对嵌入式Web容器的特性扩展的IOC容器接口。
6. ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext
-
定义:这两个都是ApplicationContext的实现类,用于从XML配置文件中加载ApplicationContext。
-
特点:
- ClassPathXmlApplicationContext默认从类路径加载配置文件。
- FileSystemXmlApplicationContext默认从文件系统中装载配置文件。
7. XmlWebApplicationContext
- 定义:XmlWebApplicationContext是WebApplicationContext的实现类,用于从XML配置文件中加载Web应用程序的上下文。
8. AnnotationConfigServletWebServerApplicationContext
-
定义:AnnotationConfigServletWebServerApplicationContext是SpringBoot整合WebMvc场景的IOC容器最终落地实现。
-
特点:
- 注解驱动的(AnnotationConfig)。
- 基于Servlet环境的。
- 支持嵌入式Web容器的应用上下文。
这些接口和实现类共同构成了Spring框架的IOC容器和应用上下文体系,为Java EE应用提供了强大的配置和管理能力。在实际开发中,可以根据项目的需求选择合适的接口和实现类来构建应用程序。
springboot中的XmlWebApplicationContext
在Spring Boot的框架中,XmlWebApplicationContext
是一个相对传统Spring框架中更常用的概念,但在Spring Boot的自动化配置和注解驱动的上下文中,其直接使用的频率有所降低。不过,理解XmlWebApplicationContext
仍然对于深入理解Spring框架及其Web应用上下文(WebApplicationContext
)的管理机制非常重要。以下是对XmlWebApplicationContext
在Spring(包括Spring Boot)环境中的详细解析:
一、定义与位置
XmlWebApplicationContext
是Spring Framework中的一个重要类,位于org.springframework.web.context.support
包中。它是AbstractRefreshableWebApplicationContext
的实现,专门用于在Web应用程序中从XML配置文件加载Spring bean定义。
二、主要功能
- XML配置加载:
XmlWebApplicationContext
可以从指定的XML配置文件加载beans,这些配置文件通常位于Web应用的WEB-INF
目录下。 - Web环境支持:作为
WebApplicationContext
的实现,它适配于Web环境,能够提供与HTTP请求和Servlet相关的上下文环境。 - 生命周期管理:负责管理Web应用的生命周期,包括初始化和关闭操作。
- 事件传播:支持事件的发布和监听,使得Web应用能够进行事件驱动的编程。
三、关键方法
setConfigLocation(String configLocation)
:设置XML配置文件的位置。getServletContext()
:返回关联的ServletContext
,可以用来访问Servlet环境资源。refresh()
:刷新Web应用程序上下文,重新加载bean定义并初始化所有beans。setId(String id)
:设置上下文的唯一标识符。
四、在Spring Boot中的应用
尽管Spring Boot倡导使用基于注解的配置和Java配置类来减少XML配置的使用,但在某些场景下(如维护老旧项目或特殊需求),仍然可能需要使用XmlWebApplicationContext
。
在Spring Boot中,如果你需要使用XmlWebApplicationContext
来加载XML配置文件,可以通过以下方式实现:
- 创建XML配置文件:在
src/main/resources
或src/main/webapp/WEB-INF
目录下创建XML配置文件,如applicationContext.xml
。 - 配置Spring Boot应用:通过编程方式或
application.properties
/application.yml
配置文件来指定XML配置文件的位置,并创建XmlWebApplicationContext
实例。不过,在Spring Boot中更常见的是通过@ImportResource
注解来导入XML配置文件。
例如,在Spring Boot的启动类或配置类上添加@ImportResource
注解:
@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class MySpringBootApplication {public static void main(String[] args) {SpringApplication.run(MySpringBootApplication.class, args);}
}
五、注意事项
- 在使用
XmlWebApplicationContext
时,需要确保XML配置文件的路径正确无误。 - Spring Boot鼓励使用基于注解的配置和Java配置类,因此在使用
XmlWebApplicationContext
时需要权衡其必要性。 - 在Spring Boot的自动化配置环境中,手动创建和管理
XmlWebApplicationContext
实例可能会增加应用的复杂性。
综上所述,XmlWebApplicationContext
在Spring Boot中仍然是一个有用的工具,但需要根据具体场景和需求来决定是否使用。在大多数情况下,Spring Boot提供的自动化配置和注解驱动的方式已经足够满足开发需求。