• Spring IoC容器及原理


    Spring IoC容器及原理

    目录

    Spring IoC容器及原理

    Spring BeanFactory容器

    Spring ApplicationContext容器


     

    Spring容器是Spring框架的核心。容器将创建对象,它们连接在一起,配置它们,并从创建到销毁管理他们的整个生命周期。在Spring容器使用依赖注入(DI)来管理组成应用程序的组件。这些对象被称为Spring Beans,我们将在下一章中讨论。 

    容器获得其上的哪些对象进行实例化,配置和组装通过阅读提供的配置元数据的说明。配置元数据可以通过XML,Java注释或Java代码来表示。下面的图是Spring如何工作的高层次图。 Spring IoC容器是利用Java的POJO类和配置元数据的产生完全配置和可执行的系统或应用程序。

     

    901f7986438c7ad7b948939b370d8c67.jpeg

    Spring提供了以下两种不同类型的容器。

    S.N.容器& 描述
    1Spring BeanFactory 容器
    这是最简单的容器DI提供基本的支持和定义由org.springframework.beans.factory.BeanFactory 接口. BeanFactory或者相关的接口,例如实现BeanFactoryAware,InitializingBean,DisposableBean,仍然存在在Spring向后兼容性与大量的与Spring整合第三方框架的目的。
    2Spring ApplicationContext 容器 
    此容器添加了更多的企业特定的功能,例如从一个属性文件解析文本消息的能力,并发布应用程序事件感兴趣的事件监听器的能力。此容器是由 org.springframework.context.ApplicationContext 接口定义.

    在ApplicationContext 容器包括BeanFactory的容器的所有功能,所以因此通常建议在BeanFactory。 BeanFactory仍然可以用于重量轻的应用,如移动装置或基于小应用程序的应用中的数据量和速度是显著。

    Spring BeanFactory容器

     

    这是最简单的容器提供DI的基本支持,并由org.springframework.beans.factory.BeanFactory 接口中定义。BeanFactory或者相关的接口,例如实现BeanFactoryAware,InitializingBean,DisposableBean,仍然存在在Spring向后兼容性与大量的 Spring 整合第三方框架的目的。

    有相当数量的接口来提供直出随取即用的Spring 的 BeanFactory接口的实现。最常用BeanFactory 实现的是 XmlBeanFactoryclass。此容器从XML文件中读取配置元数据,并使用它来创建一个完全配置的系统或应用程序。

    BeanFactory中通常是首选的资源,如移动设备或基于applet的应用受到限制。因此,使用一个ApplicationContext,除非你有一个很好的理由不这样做。

    例如:

    让我们使用 Eclipse IDE,然后按照下面的步骤来创建一个Spring应用程序:

    步骤描述
    1创建一个项目名称为 SpringExample 并创建一个包 com.manongjc 在文件夹 src 下.
    2Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.
    3Create Java classes HelloWorld and MainApp under the com.manongjc package.
    4Create Beans configuration file Beans.xml under the src folder.
    5The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below.

    这里是HelloWorld.java文件的内容:

    1. package com.manongjc;
    2. public class HelloWorld {
    3. private String message;
    4. public void setMessage(String message){
    5. this.message = message;
    6. }
    7. public void getMessage(){
    8. System.out.println("Your Message : " + message);
    9. }
    10. }

    下面是第二个文件 MainApp.java 的内容:

    1. package com.manongjc;
    2. import org.springframework.beans.factory.InitializingBean;
    3. import org.springframework.beans.factory.xml.XmlBeanFactory;
    4. import org.springframework.core.io.ClassPathResource;
    5. public class MainApp {
    6. public static void main(String[] args) {
    7. XmlBeanFactory factory = new XmlBeanFactory
    8. (new ClassPathResource("Beans.xml"));
    9. HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
    10. obj.getMessage();
    11. }
    12. }

    有以下两个要点需要注意在主要程序中:

    1. 第一步是创建工厂对象,我们使用的框架API XmlBeanFactory() 来创建工厂bean,并使用ClassPathResource() API来加载在CLASSPATH中可用的bean配置文件。在API 需要 XmlBeanFactory() 创建和初始化所有对象。在配置文件中提到的 bean 类。

    2. 第二个步骤是用来使用创建的bean工厂对象的 getBean() 方法获得所需的 bean。此方法使用bean 的 id 返回,最终可以构造到实际对象的通用对象。一旦有了对象,就可以使用这个对象调用任何类方法。

    以下是bean配置文件beans.xml中的内容

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans
    5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    6. <bean id="helloWorld" class="com.manongjc.HelloWorld">
    7. <property name="message" value="Hello World!"/>
    8. </bean>
    9. </beans>

    一旦创建源和bean配置文件来完成,让我们运行应用程序。如果一切顺利,您的应用程序,这将打印以下信息:

    Your Message : Hello World!

    Spring ApplicationContext容器

     

    应用程序上下文(Application Context)是Spring更先进的容器。以它的BeanFactory类似可以加载bean定义,并根据要求分配bean。此外,它增加了更多的企业特定的功能,例如从一个属性文件解析文本消息的能力,并发布应用程序事件感兴趣的事件监听器的能力。此容器是由org.springframework.context.ApplicationContext 接口定义。

    ApplicationContext 包括了 BeanFactory 所有的功能,因此通常建议在 BeanFactory。 BeanFactory中仍然可以用于重量轻的应用,如移动装置或基于小应用程序的应用程序。

    最常用的 ApplicationContext 实现是:

    • FileSystemXmlApplicationContext: 这个容器加载从一个XML文件中的bean的定义。在这里,你需要提供给构造函数中的XML bean配置文件的完整路径。

    • ClassPathXmlApplicationContext 这个容器加载从一个XML文件中的bean的定义。在这里,您不需要提供XML文件的完整路径,但你需要正确设置CLASSPATH,因为这个容器会看在CLASSPATH中bean的XML配置文件.

    • WebXmlApplicationContext: 此容器加载所有的bean从Web应用程序中定义的XML文件。

    我们已经看到在Spring 的Hello World示例ClassPathXmlApplicationContext容器的例子,我们将更多地谈论XmlWebApplicationContext 在一个单独的章节时,我们将讨论基于Web的Spring应用程序。所以,让我们看到FileSystemXmlApplicationContext一个例子。

    例子:

    我们使用Eclipse IDE,然后按照下面的步骤来创建一个 Spring 应用程序:

    步骤描述
    1Create a project with a name SpringExample and create a package com.manongjc under the src folder in the created project.
    2Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.
    3Create Java classes HelloWorld and MainApp under the com.manongjc package.
    4Create Beans configuration file Beans.xml under the src folder.
    5The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below.

    这里是HelloWorld.java 文件的内容:

    1. package com.manongjc;
    2. public class HelloWorld {
    3. private String message;
    4. public void setMessage(String message){
    5. this.message = message;
    6. }
    7. public void getMessage(){
    8. System.out.println("Your Message : " + message);
    9. }
    10. }

    下面是第二个文件MainApp.java 的内容:

    1. package com.manongjc;
    2. import org.springframework.context.ApplicationContext;
    3. import org.springframework.context.support.FileSystemXmlApplicationContext;
    4. public class MainApp {
    5. public static void main(String[] args) {
    6. ApplicationContext context = new FileSystemXmlApplicationContext
    7. ("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml");
    8. HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
    9. obj.getMessage();
    10. }
    11. }

    有以下两个要点需要注意在主要程序中:

    1. 第一步是创建工厂对象,我们使用的框架API的 FileSystemXmlApplicationContext来从给定的路径加载bean配置文件之后,创建工厂bean。API的FileSystemXmlApplicationContext()需要创建和初始化所有的对象。在XML bean配置文件中提到的bean类。

    2. 第二个步骤是用来使用创建的上下文的getBean()方法获得所需的bean。此方法使用bean的id返回,最终可以构造到实际对象的通用对象。一旦有了对象,我们就可以使用这个对象调用任何类方法。

    以下是bean配置文件beans.xml中的内容

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans
    5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    6. <bean id="helloWorld" class="com.manongjc.HelloWorld">
    7. <property name="message" value="Hello World!"/>
    8. </bean>
    9. </beans>

    一旦创建源代码和bean配置文件完成,让我们运行应用程序。如果一切顺利,这将打印以下信息:

    Your Message : Hello World!

     

  • 相关阅读:
    为什么企业需要一套设备管理系统?
    LinkedList源码解析及队列和栈相关分析
    Java 的反射
    少儿编程机器人技术开发公司的创新之路
    Lnmp架构
    Git常用指令-1
    在centos7上搭建hadoop集群
    xss总结
    指针作为传入传出参数
    win11怎么更新22H2?不要错过这两个Win11升级22H2的好方法!
  • 原文地址:https://blog.csdn.net/2301_78835635/article/details/133553678