转载自  Spring 由构造函数自动装配

Spring 由构造函数自动装配

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

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

让我们在恰当的位置使用 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 文件的内容:

package com.tutorialspoint;
public class TextEditor {private SpellChecker spellChecker;private String name;public TextEditor( SpellChecker spellChecker, String name ) {this.spellChecker = spellChecker;this.name = name;}public SpellChecker getSpellChecker() {return spellChecker;}public String getName() {return name;}public void spellCheck() {spellChecker.checkSpelling();}
}

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

package com.tutorialspoint;
public class SpellChecker {public SpellChecker(){System.out.println("Inside SpellChecker constructor." );}public void checkSpelling(){System.out.println("Inside checkSpelling." );}
}

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

package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");TextEditor te = (TextEditor) context.getBean("textEditor");te.spellCheck();}
}

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

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- Definition for textEditor bean --><bean id="textEditor" class="com.tutorialspoint.TextEditor"><constructor-arg  ref="spellChecker" /><constructor-arg  value="Generic Text Editor"/></bean><!-- Definition for spellChecker bean --><bean id="spellChecker" class="com.tutorialspoint.SpellChecker"></bean></beans>

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

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- Definition for textEditor bean --><bean id="textEditor" class="com.tutorialspoint.TextEditor" autowire="constructor"><constructor-arg value="Generic Text Editor"/></bean><!-- Definition for spellChecker bean --><bean id="SpellChecker" class="com.tutorialspoint.SpellChecker"></bean></beans>

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

Inside SpellChecker constructor.
Inside checkSpelling.

Spring 由构造函数自动装配相关推荐

  1. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...

    详解Java的Spring框架下bean的自动装载方式 Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的和元素. 自 ...

  2. Spring Boot(一) 自动装配--约定大于配置

    欢迎去我的个人博客--晓坞坐坐,里面有很多有趣的文章,不止是技术.www.lixiaodongisme.com 随着spring体系的发展,我们在开发时需要配置整合的东西也越来越多,在进行开发时,繁琐 ...

  3. Spring精华问答 | Spring Bean的自动装配是怎么回事?

    戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...

  4. Spring IOC容器-自动装配

    1 autowire="byName" 根据名称自动装配,自动去IOC容器中找与属性名同名的引用的对象,并自动注入. <!-- ###############自动装配#### ...

  5. Spring中的自动装配和Autowired

    彻底搞明白Spring中的自动装配和Autowired 一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个 ...

  6. Spring按类型自动装配注入数组、集合、Map

    Spring按类型自动装配注入数组.集合.Map时,是把应用上下文中对应类型的bean装配进集合,而不是直接查找一个对应类型的集合然后注入.以下面这段代码为例: import org.springfr ...

  7. Spring学习笔记--自动装配Bean属性

    Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType – 把与Bean的属性具有相同类型 ...

  8. [Spring]Bean的自动装配

    Spring支持5种自动装配模式,如下: 1.no --默认情况下,不自动装配,通过"ref"attribute手动设定. 2.buName --根据Property的Name自动 ...

  9. Spring抛出异常_自动装配

    Spring自动装配(autowire)出错 报错如下: org.springframework.beans.factory.UnsatisfiedDependencyException: Error ...

最新文章

  1. WP7开发—Silverlight多点触摸事件详解【含Demo代码】
  2. IOS UINavigationController use
  3. MongoDB 的 upsert
  4. 查找字符串前缀python_python-从一组(相似)字符串中确定前缀
  5. python--for循环
  6. JavaScript.Remove
  7. redhat multipath配置文件简要说明
  8. oops 内核重启问题_OOPS面试问答
  9. PGM:概率论基础知识
  10. VS2010打开VS2013、VS2015建立的工程,各种版本之间转换
  11. visio输出论文用矢量图
  12. 《赖氏经典英语语法》第一集
  13. 基于Django 文档1.11 自解+补完 学习django ---part1
  14. 重心模型选址代码_如何规划选址体系,让选址像流水线更简单?
  15. AJAX 提交表单以及文件上传
  16. 一文搞懂H264量化原理以及计算过程
  17. 如何打造有特色的在线教育培训平台
  18. 根式为什么是根式?(我可能疯了?)
  19. VMware启动虚拟机一直处于黑屏
  20. 十一、jQuery(下) - 章节课后练习题及答案

热门文章

  1. Redis缓存雪崩、缓存穿透、热点Key
  2. DijKstra算法普通+堆优化链式向前星
  3. Sticks-hdu-1455深度搜索dfs
  4. 2021牛客暑期多校训练营3 C Minimum grid 网络流 + 二分图匹配
  5. Codeforces Round #633 B. Edge Weight Assignment 结论题 + dp
  6. Codeforces Round #617 (Div. 3) E2. String Coloring (hard version) 思维 + dp + Dilworth定理
  7. P1005 矩阵取数游戏(__int128模板/简单dp)
  8. Strange Partition CodeForces - 1471A
  9. [2021-09-02 contest]CF1251C,可达性统计(bitset优化dp),Boomerang Tournament(状压dp),小蓝的好友(mrx)(treap平衡树)
  10. CF407 E. k-d-sequence(线段树+单调栈)