美文网首页
4.Spring Beans 自动装配

4.Spring Beans 自动装配

作者: 乐于吕 | 来源:发表于2020-05-14 19:22 被阅读0次

1.Spring Beans 自动装配

Beans 自动装配

你已经学会如何使用<bean>元素来声明 bean 和通过使用 XML 配置文件中的<constructor-arg>和<property>元素来注入 。

Spring 容器可以在不使用<constructor-arg>和<property> 元素的情况下自动装配相互协作的 bean 之间的关系,这有助于减少编写一个大的基于 Spring 的应用程序的 XML 配置的数量。

自动装配模式

下列自动装配模式,它们可用于指示 Spring 容器为来使用自动装配进行依赖注入。你可以使用<bean>元素的 autowire 属性为一个 bean 定义指定自动装配模式。

模式描述

no这是默认的设置,它意味着没有自动装配,你应该使用显式的bean引用来连线。你不用为了连线做特殊的事。在依赖注入章节你已经看到这个了。

byName由属性名自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byName。然后尝试匹配,并且将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接。

byType由属性数据类型自动装配。Spring 容器看到在 XML 配置文件中 bean 的自动装配的属性设置为 byType。然后如果它的类型匹配配置文件中的一个确切的 bean 名称,它将尝试匹配和连接属性的类型。如果存在不止一个这样的 bean,则一个致命的异常将会被抛出。

constructor类似于 byType,但该类型适用于构造函数参数类型。如果在容器中没有一个构造函数参数类型的 bean,则一个致命错误将会发生。

autodetectSpring首先尝试通过 constructor 使用自动装配来连接,如果它不执行,Spring 尝试通过 byType 来自动装配。

可以使用 byType 或者 constructor 自动装配模式来连接数组和其他类型的集合。

自动装配的局限性

当自动装配始终在同一个项目中使用时,它的效果最好。如果通常不使用自动装配,它可能会使开发人员混淆的使用它来连接只有一个或两个 bean 定义。不过,自动装配可以显著减少需要指定的属性或构造器参数,但你应该在使用它们之前考虑到自动装配的局限性和缺点。

限制描述

重写的可能性你可以使用总是重写自动装配的 <constructor-arg>和 <property> 设置来指定依赖关系。

原始数据类型你不能自动装配所谓的简单类型包括基本类型,字符串和类。

混乱的本质自动装配不如显式装配精确,所以如果可能的话尽可能使用显式装配。

2.Spring 自动装配 `byName`

Spring 自动装配 ‘byName’

这种模式由属性名称指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 auto-wire 属性设置为 byName。然后,它尝试将它的属性与配置文件中定义为相同名称的 beans 进行匹配和连接。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。

例如,在配置文件中,如果一个 bean 定义设置为自动装配 byName,并且它包含 spellChecker 属性(即,它有一个 setSpellChecker(...) 方法),那么 Spring 就会查找定义名为 spellChecker 的 bean,并且用它来设置这个属性。你仍然可以使用 标签连接其余的属性。下面的例子将说明这个概念。

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

步骤描述

1创建一个名称为 SpringExample 的项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2使用 Add External JARs 选项,添加所需的 Spring 库,在 Spring Hello World Example 章节中已说明。

3在 com.tutorialspoint 包中创建 Java 类 TextEditorSpellChecker 和 MainApp

4在 src 文件夹中创建 Beans 的配置文件 Beans.xml

5最后一步是创建所有 Java 文件和 Bean 配置文件的内容,并运行该应用程序,正如下面解释的一样。

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

packagecom.tutorialspoint;publicclassTextEditor{privateSpellChecker spellChecker;privateString name;publicvoidsetSpellChecker( SpellChecker spellChecker ){this.spellChecker = spellChecker;  }publicSpellCheckergetSpellChecker(){returnspellChecker;  }publicvoidsetName(String name){this.name = name;  }publicStringgetName(){returnname;  }publicvoidspellCheck(){      spellChecker.checkSpelling();  }}

下面是另一个依赖类文件 SpellChecker.java 的内容:

packagecom.tutorialspoint;publicclassSpellChecker{publicSpellChecker(){      System.out.println("Inside SpellChecker constructor.");  }publicvoidcheckSpelling(){      System.out.println("Inside checkSpelling.");  }  }

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

packagecom.tutorialspoint;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassMainApp{publicstaticvoidmain(String[] args){      ApplicationContext context =newClassPathXmlApplicationContext("Beans.xml");      TextEditor te = (TextEditor) context.getBean("textEditor");      te.spellCheck();  }}

下面是在正常情况下的配置文件 Beans.xml 文件:

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">                       

但是,如果你要使用自动装配 “byName”,那么你的 XML 配置文件将成为如下:

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">                 

一旦你完成了创建源代码和 bean 的配置文件,我们就可以运行该应用程序。如果你的应用程序一切都正常,它将打印下面的消息:

Inside SpellChecker constructor.

Inside checkSpelling.

3.Spring 自动装配 `byType`

Spring 自动装配 ‘byType’

这种模式由属性类型指定自动装配。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 byType。然后,如果它的 type 恰好与配置文件中 beans 名称中的一个相匹配,它将尝试匹配和连接它的属性。如果找到匹配项,它将注入这些 beans,否则,它将抛出异常。

例如,在配置文件中,如果一个 bean 定义设置为自动装配 byType,并且它包含 SpellChecker 类型的 spellChecker 属性,那么 Spring 就会查找定义名为 SpellChecker 的 bean,并且用它来设置这个属性。你仍然可以使用 标签连接其余属性。下面的例子将说明这个概念,你会发现和上面的例子没有什么区别,除了 XML 配置文件已经被改变。

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

步骤描述

1创建一个名称为 SpringExample 的项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2使用 Add External JARs 选项,添加所需的 Spring 库,在 Spring Hello World Example 章节中已说明。

3在 com.tutorialspoint 包中创建 Java 类 TextEditorSpellChecker 和 MainApp

4在 src 文件夹中创建 Beans 的配置文件 Beans.xml

5最后一步是创建所有 Java 文件和 Bean 配置文件的内容,并运行该应用程序,正如下面解释的一样。

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

packagecom.tutorialspoint;publicclassTextEditor{privateSpellChecker spellChecker;privateString name;publicvoidsetSpellChecker( SpellChecker spellChecker ){this.spellChecker = spellChecker;  }publicSpellCheckergetSpellChecker(){returnspellChecker;  }publicvoidsetName(String name){this.name = name;  }publicStringgetName(){returnname;  }publicvoidspellCheck(){      spellChecker.checkSpelling();  }}

下面是另一个依赖类文件 SpellChecker.java 的内容:

packagecom.tutorialspoint;publicclassSpellChecker{publicSpellChecker(){      System.out.println("Inside SpellChecker constructor.");  }publicvoidcheckSpelling(){      System.out.println("Inside checkSpelling.");  }  }

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

packagecom.tutorialspoint;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassMainApp{publicstaticvoidmain(String[] args){      ApplicationContext context =newClassPathXmlApplicationContext("Beans.xml");      TextEditor te = (TextEditor) context.getBean("textEditor");      te.spellCheck();  }}

下面是在正常情况下的配置文件 Beans.xml 文件:

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">                       

但是,如果你要使用自动装配 “byType”,那么你的 XML 配置文件将成为如下:

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">                 

一旦你完成了创建源代码和 bean 的配置文件,我们就可以运行该应用程序。如果你的应用程序一切都正常,它将打印下面的消息:

Inside SpellChecker constructor.

Inside checkSpelling.

4.Spring 由构造函数自动装配

Spring 由构造函数自动装配

这种模式与 byType 非常相似,但它应用于构造器参数。Spring 容器看作 beans,在 XML 配置文件中 beans 的 autowire 属性设置为 constructor。然后,它尝试把它的构造函数的参数与配置文件中 beans 名称中的一个进行匹配和连线。如果找到匹配项,它会注入这些 bean,否则,它会抛出异常。

例如,在配置文件中,如果一个 bean 定义设置为通过构造函数自动装配,而且它有一个带有 SpellChecker 类型的参数之一的构造函数,那么 Spring 就会查找定义名为 SpellChecker 的 bean,并用它来设置构造函数的参数。你仍然可以使用 标签连接其余属性。下面的例子将说明这个概念。

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

步骤描述

1创建一个名称为 SpringExample 的项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2使用 Add External JARs 选项,添加所需的 Spring 库,在 Spring Hello World Example 章节中已说明。

3在 com.tutorialspoint 包中创建 Java 类 TextEditorSpellChecker 和 MainApp

4在 src 文件夹中创建 Beans 的配置文件 Beans.xml

5最后一步是创建所有 Java 文件和 Bean 配置文件的内容,并运行该应用程序,正如下面解释的一样。

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

packagecom.tutorialspoint;publicclassTextEditor{privateSpellChecker spellChecker;privateString name;publicTextEditor( SpellChecker spellChecker, String name ){this.spellChecker = spellChecker;this.name = name;  }publicSpellCheckergetSpellChecker(){returnspellChecker;  }publicStringgetName(){returnname;  }publicvoidspellCheck(){      spellChecker.checkSpelling();  }}

下面是另一个依赖类文件 SpellChecker.java 的内容:

packagecom.tutorialspoint;publicclassSpellChecker{publicSpellChecker(){      System.out.println("Inside SpellChecker constructor.");  }publicvoidcheckSpelling(){      System.out.println("Inside checkSpelling.");  }  }

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

packagecom.tutorialspoint;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassMainApp{publicstaticvoidmain(String[] args){      ApplicationContext context =newClassPathXmlApplicationContext("Beans.xml");      TextEditor te = (TextEditor) context.getBean("textEditor");      te.spellCheck();  }}

下面是在正常情况下的配置文件 Beans.xml 文件:

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">                       

但是,如果你要使用自动装配 “by constructor”,那么你的 XML 配置文件将成为如下:

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">                 

一旦你完成了创建源代码和 bean 的配置文件,我们就可以运行该应用程序。如果你的应用程序一切都正常,它将打印下面的消息:

Inside SpellChecker constructor.

Inside checkSpelling.

相关文章

  • 4.Spring Beans 自动装配

    1.Spring Beans 自动装配 Beans 自动装配 你已经学会如何使用 元素来声明 bean 和通过使用...

  • Spring 自动装配Bean

    1.自动装配Beans 在Spring框架,可以用 auto-wiring 功能会自动装配Bean。要启用它,只需...

  • Spring自动装配Beans

    在Spring框架,可以用 auto-wiring 功能会自动装配Bean。要启用它,只需要在 定义“autow...

  • Spring_10_Beans 的自动装配

    Beans 的自动装配 Spring 容器可以在不使用和元素的清空下自动装配相互协作的bean之间的关系,这有助于...

  • 24 Spring自动装配Beans

    在Spring框架,可以用 auto-wiring 功能会自动装配Bean。要启用它,只需要在 定义“autow...

  • 基于XML配置的Bean的装配

    Spring容器装配Bean流程 首先Bean的装配有以下四种方式: XML Beans 注解(@Autowire...

  • SpringBoot 自动装配原理

    SpringBoot 自动装配原理 SpringBoot 基本特性 AutoConfiguration 自动装配 ...

  • Spring详解(五)IOC容器-自动装配

    自动装配: 根据名称来自动装配 autowire="byName"自动在IOC容器中查找与属性名同名的对象,自动注...

  • 解释不同方式的自动装配 。

    解释不同方式的自动装配。 有五种自动装配的方式,可以用来指导Spring容器用自动装配方式来进行依赖注入。 no:...

  • spring

    IOC Bean的装配 自动化装配 自动装配就是让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,...

网友评论

      本文标题:4.Spring Beans 自动装配

      本文链接:https://www.haomeiwen.com/subject/qbyxohtx.html