面试篇-揭开Spring Bean加载的神秘面纱

SpringBean加载完整过程

启动spring容器(创建beanfactory)->加载配置(注解、xml)->实例化bean(执行构造方法)->注入依赖->初始化bean(设置属性值)->使用->销毁

  1. 解析和读取 XML 配置文件或注解配置类,获取 Bean 定义信息。
  2. 根据 Bean 定义信息实例化 Bean 对象。根据不同的作用域(如 singleton、prototype 等),Spring 会采用相应的方式来创建 Bean 对象。
  3. 注入 Bean 的依赖关系。Spring 会检查 Bean 定义信息中所声明的属性或构造函数参数,并将对应的依赖对象注入到 Bean 中。
  4. 执行 Bean 的初始化操作。Spring 提供了多种方式来进行 Bean 的初始化,包括 InitializingBean 接口、@PostConstruct 注解、配置文件中的 init-method 等。
  5. 将 Bean 注册到 Spring 容器中,完成加载过程。

需要注意的是,Spring Bean 加载过程中还涉及到很多细节和扩展点,如 Bean 的后置处理器、AOP、条件装配等,这些内容可以进一步深入学习。

Spring Bean相关面试题

  1. Spring Bean 的加载过程包括哪些步骤?

答:Spring Bean 的加载过程主要包括解析和读取配置文件、实例化 Bean 对象、注入依赖关系、初始化 Bean 和使用、销毁等步骤。

  1. BeanFactory 和 ApplicationContext 有什么区别?它们在 Bean 加载过程中有何不同?

答:BeanFactory 是 Spring 容器中最基本的接口,提供了最简单的容器服务,仅支持延迟初始化。ApplicationContext 是 BeanFactory 的子接口,增加了更多的企业级功能,如事件发布、国际化消息处理等,并且预先实例化单例 Bean。

  1. Spring Bean 生命周期包括哪些阶段?如何在 Bean 生命周期的不同阶段进行操作?

答:Spring Bean 生命周期包括实例化、依赖注入、初始化、销毁等阶段,可以通过继承 InitializingBean 和 DisposableBean 接口、使用 @PostConstruct 和 @PreDestroy 注解、配置 XML 中的 init-method 和 destroy-method 方法来在 Bean 生命周期的不同阶段进行操作。

  1. Spring Bean 的作用域有哪些?它们在 Bean 加载和使用过程中有何不同?

答:Spring Bean 的作用域包括 singleton、prototype、request、session 和 global session 等,它们在 Bean 加载和使用过程中的主要区别在于是否共享 Bean 实例、生命周期长度及作用域范围。

  1. Spring 如何解决循环依赖问题?涉及哪些机制或实现原理?

答:Spring 通过提前暴露对象的实例化中介来解决循环依赖问题,主要涉及一级缓存和二级缓存机制以及后置处理器等实现原理。

  1. Spring 如何支持注解配置 Bean?常用的注解有哪些?

答:Spring 支持使用 @ComponentScan、@Configuration、@Bean、@Autowired 等注解进行 Bean 的自动扫描、注入和配置等操作。常用的注解还包括 @Service、@Controller、@Repository、@Qualifier 等。

  1. Spring 在 Bean 加载过程中如何进行属性注入?可以通过哪些方式来注入属性?

答:Spring 可以通过构造函数注入、setter 方法注入、字段注入、方法注入等方式来进行属性注入。可以使用 @Autowired、@Value 注解等。

猜你喜欢

转载自blog.csdn.net/citywu123/article/details/130054210