Spring框架的启动过程

70 阅读3分钟
  1. 加载配置文件: Spring框架的启动通常始于加载配置文件。这可以是XML文件、Java配置类或者注解配置等。框架会读取这些配置文件以了解应用程序的组件和它们之间的关系。
  2. 初始化Spring容器: 通过读取配置文件,Spring容器会初始化并且创建所有配置中定义的对象(例如,被@Component注解标记的类)。
  3. 实例化Bean: Spring容器负责实例化和管理应用程序中的所有Bean。这是通过Bean工厂或应用上下文(ApplicationContext)来完成的。
  4. 应用依赖注入: 在实例化Bean之后,Spring容器会自动处理依赖注入,将一个Bean的引用注入到另一个Bean中。
  5. Bean的生命周期: Spring容器管理Bean的整个生命周期,包括实例化、初始化、使用和销毁。这是通过Bean的生命周期回调方法(例如initdestroy方法)来实现的。
  6. 发布应用事件: Spring框架允许应用程序中的各个组件发布和监听事件。在初始化过程中,Spring容器会发布一些事件,允许感兴趣的组件对其进行响应。
  7. 启动应用: 最终,Spring容器会准备好所有的Bean并完成初始化,应用程序可以开始响应外部请求。

Bean工厂是负责管理应用程序中所有Bean对象的核心容器。它是一个工厂类,负责实例化、配置和管理Bean对象。

  1. BeanFactory接口: 这是Spring框架中最基本的Bean工厂接口,提供了最基本的功能,包括Bean的实例化、依赖注入和生命周期管理。其常用的实现类是XmlBeanFactory,但在新版本的Spring中,推荐使用更加强大的ApplicationContext。

    javaCopy code
    Resource resource = new ClassPathResource("beans.xml");
    BeanFactory factory = new XmlBeanFactory(resource);
    

    这里的XmlBeanFactory通过读取XML文件中的配置信息,实例化并管理应用程序中的Bean。

  2. ApplicationContext接口: ApplicationContext扩展了BeanFactory接口,提供了更多的企业级功能。它是一个更高级的容器,支持消息资源、事件发布、AOP等功能。常见的实现类包括ClassPathXmlApplicationContextAnnotationConfigApplicationContext等。

    javaCopy code
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    

    这里的ClassPathXmlApplicationContext通过读取类路径下的XML文件,初始化并管理应用程序中的Bean。

Bean工厂的主要职责包括:

  • 实例化Bean: 根据配置信息实例化Bean对象。
  • 依赖注入: 将Bean依赖的其他Bean注入到它们之中。
  • 生命周期管理: 管理Bean的生命周期,包括初始化和销毁。
  • 配置元信息: 保存了每个Bean的配置元信息,例如类名、作用域、构造函数参数等。

BeanFactory和ApplicationContext之间的主要区别在于ApplicationContext提供了更多的企业级功能,并且在应用程序启动时预先实例化所有的单例Bean,而BeanFactory则是在需要时才进行实例化。因此,对于大多数应用程序,推荐使用ApplicationContext。