BeanFactory的实现

BeanFactory的实现DefaultListableFactory根据Bean的定义(class, scope,初始化,销毁)来创建bean

创建Config类的BeanDefinition并注册

为什么只有config,而没有bean1、bean2?
因为现在的beanFactory缺失了解析@Configuration、@Bean注解的能力

如何完善功能?

给BeanFactory添加常用的后处理器

调用这些后处理器

通过类型来获取它们

拿到后逐一执行,从而实现功能的扩展

Spring中的BeanFactory的原始功能并没有那么完善的,它的扩展功能是由一些后处理器来完成的(补充了一些bean的定义)

把注册到beanFactory中的bean拿出来使用

依赖注入的功能没有,依赖注入也是一个扩展功能

这种叫做bean的后处理器

它是针对每个bean的生命周期的各个阶段,创建、依赖注入、初始化,提供一些扩展功能(@Autowired\@Resource)

获取他们逐一执行

建立bean过程与后处理器之间的联系

观察一下它的时机

刚开始只保存了一些描述信息在beanFactory中,当第一次用到它的时候才去创建,默认延迟初始化

除非:

预先创建好所有的bean对象

beanFactory只是提供一些基础功能,很多扩展功能都没实现

Autowired是根据成员变量的名字注入bean3。而Resource是根据设置注入bean4,如果两个都加了会注入谁呢?

这更后处理器的优先级有关,因为Autowired后处理器先被注入所以它的优先级高,不过这是可以改变

ApplicationContext的实现

基于XML配置的实现类
ClassPathXmlApplicationContext:从类路径下加载XML配置文件。
FileSystemXmlApplicationContext:从文件系统路径加载XML配置文件。
基于注解配置的实现类
AnnotationConfigApplicationContext:从Java配置类(使用@Configuration注解的类)加载配置。

@Configuration

public class AppConfig {

@Bean

public MyBean myBean() {

return new MyBean();

}

}
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

基于Web应用的实现类
XmlWebApplicationContext:专门为Web应用设计的ApplicationContext实现类,从Web应用的上下文中加载XML配置文件。
通常在web.xml中配置:

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/applicationContext.xml</param-value>

</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

AnnotationConfigServletWebServerApplicationContext:专门为Web应用设计的ApplicationContext实现类,从Java配置类加载配置

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐