BeanFactory 是 Spring 框架中最基本的容器接口,定义了 Spring 容器的核心方法,用于管理 Bean 的生命周期和依赖注入。
ApplicationContext 是 BeanFactory 的子接口,提供了更多的功能,如国际化支持、事件传播、自动扫描组件等。因此,会使用ApplicationContext 来代替 BeanFactory。
BeanFactory 的作用
Bean 实例化:根据配置信息或注解定义,创建应用程序中需要的Bean实例。负责解析Bean定义,处理依赖关系,并将Bean实例化为可用的对象。
依赖注入:将所需依赖注入到 Bean 中,确保 Bean 能正确运行。包括设置属性值、调用初始化方法等。
配置和管理:根据配置文件或注解来配置和管理 Bean 实例,提供了各种方法来获取和操作 Bean 实例。
生命周期管理:管理 Bean 的整个生命周期,包括创建、初始化、使用和销毁。
BeanFactory的创建
BeanFactory的创建方式主要包括XML配置方式、Java配置方式和注解配置方式:
XML 配置方式:这是创建 BeanFactory 的传统方式。需要在 XML 配置文件中定义 Bean 的信息,包括 Bean 的名称、类路径、属性等,通过加载配置文件来创建和管理 BeanFactory 。
Java配置方式:在 Java 类中定义 Bean 的创建和依赖关系,通过配置类来创建和管理 BeanFactory。通常涉及到使用 @Configuration 注解来标识配置类,并使用 @Bean 注解来定义 Bean 的实例化、配置和管理信息。
注解配置方式:在 Java 类上添加相应的注解来标识该类是一个 Bean,并进行相应的配置信息。Spring 会自动扫描并创建相应的 Bean,并将其添加到 ApplicationContext 中,AnnotationConfigApplicationContext 作为其子类,同样支持注解配置方式。
ApplicationContext 的作用
Bean 的创建和管理:负责实例化和管理应用中的所有 Bean ,包括它们的创建、配置、生命周期管理等。提供了对 Bean 的访问和控制,使得 Bean 之间的依赖关系可以通过依赖注入的方式轻松实现。
依赖注入:支持依赖注入,允许 Bean 轻松地获取其依赖的其他 Bean。
国际化支持:根据不同的语言环境加载不同的资源文件实现多语言。通过继承 MessageSource 接口来支持消息解析和国际化。
事件传播:可以发布事件,并允许其他组件注册监听器来处理这些事件,这种机制实现了组件之间的解耦。
资源加载:提供了一个统一的接口,可以方便的加载和管理各种资源,如配置文件、XML 文件、Properties 文件等。
面向切面编程:提供了对 AOP 的支持,允许通过配置切面来实现横切关注点的模块化。
中央接口:为应用程序提供配置的中央接口,在应用程序运行时这是只读的,但如果实现支持这一点,则可以重新加载。
继承性:后代上下文中的定义总是优先于父上下文中的定义,这意味着单个父上下文可以被整个 web 应用共享。
2、ApplicationContext 的实现类
ClassPathXmlApplicationContext:从类路径中获取上下文定义文件,适用于测试工具以及嵌入在 jar 中的应用程序上下文。
FileSystemXmlApplicationContext:从文件系统或 URL 获取上下文定义文件,适用于独立的应用程序。
AnnotationConfigApplicationContext:在 Spring 3.0 中引入,允许通过 Java 配置类来配置应用程序上下文,与 @Configuration 、@Component 等注解一起工作。