Spring支持3种依赖注入的方式:属性注入、构造器注入、工厂

1.属性注入

属性注入即通过setter方法注入Bean的属性或依赖的对象。使用<property>元素,使用name属性指定Bean的属性名称,value 属性或<value>子节点指定属性值

,是实际应用当中最常用的注入方式。

<!--配置Bean-->
<bean id="helloWorld" class="com.wzy.lesson1.HelloWorld">
<!--通过setName方法注入-->
<property name="name" value="Spring"/>
</bean>

2.构造器注入

通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例化后就可以使用。

构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性。

 <!--通过构造方法来配置bean的属性-->
<bean id="car" class="com.wzy.lesson1.Car">
<constructor-arg value="Audi" index="0"/>
<constructor-arg value="ShangHai" index="1"/>
<constructor-arg value="3000000" index="2"/>
</bean>

如果构造方法的参数个数相同,并且只指定了参数的顺序没有指定参数的类型,那么容器将无法区分应使用哪个构造器,就会造成错误。

 <!--通过构造方法来配置bean的属性-->
<bean id="car" class="com.wzy.lesson1.Car">
<constructor-arg value="Audi" index="0"/>
<constructor-arg value="ShangHai" index="1"/>
<constructor-arg value="3000000" index="2"/>
</bean> <!--通过构造方法来配置bean的属性-->
<bean id="car1" class="com.wzy.lesson1.Car">
<constructor-arg value="Audi" index="0"/>
<constructor-arg value="ShangHai" index="1"/>
<constructor-arg value="200" index="2" />
</bean>

因为没有指定类型所以容器都使用了,第一个构造方法进行注入,导致本来的maxSpeed属性值注入到price当中

在注入时我们指定注入的参数类型,来避免构造函数重载时,发生这种错误:

 <!--通过构造方法来配置bean的属性-->
<bean id="car" class="com.wzy.lesson1.Car">
<constructor-arg value="Audi" index="0" type="java.lang.String"/>
<constructor-arg value="ShangHai" index="1" type="java.lang.String"/>
<constructor-arg value="3000000" index="2" type="double"/>
</bean> <!--通过构造方法来配置bean的属性-->
<bean id="car1" class="com.wzy.lesson1.Car">
<constructor-arg value="Audi" index="0" type="java.lang.String"/>
<constructor-arg value="ShangHai" index="1" type="java.lang.String"/>
<constructor-arg value="200" index="2" type="int"/>
</bean>

这样我们就可以得到正确的结果:

3.工厂方法注入(很少使用,不推荐)

Spring基础05——Spring依赖注入的三种方式的更多相关文章

  1. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  2. SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式

           于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...

  3. Spring注解依赖注入的三种方式的优缺点以及优先选择

    当我们在使用依赖注入的时候,通常有三种方式: 1.通过构造器来注入: 2.通过setter方法来注入: 3.通过filed变量来注入: 那么他们有什么区别吗?应该选择哪种方式更好? 三种方式的区别小结 ...

  4. SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

           在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...

  5. Spring依赖注入的三种方式

    看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...

  6. spring——依赖注入的三种方式

    1 构造器注入(与构造器有直接关系) 默认无参构造 3种构造方式:通过<contructor-arg>调用类中的构造器 下标 <bean id="userService&q ...

  7. Spring系列4:依赖注入的2种方式

    本文内容 基于构造器的依赖注入 基于setter的依赖注入 基于构造器的依赖注入 案例 定义2个简单的bean类,BeanOne 和 BeanTwo,前者依赖后者. package com.crab. ...

  8. spring4之依赖注入的三种方式

    1.Setter注入 <bean id="helloWorld" class="com.jdw.spring.beans.HelloWorld"> ...

  9. 在ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请求的 Controller,让Controller ...

随机推荐

  1. centos网卡配置NM_CONTROLLED=”yes” 慎用

    今天有1台服务器修改了 /etc/sysconfig/network-scripts/ifcfg-eth0 配置文件中的一个参数: NM_CONTROLLED=“yes” 修改成 NM_CONTROL ...

  2. android自定义camera以及uri和文件路径之间的转换

    相对直接调用系统的camera,这种方法使用得相对还少一些.根据api文档,步骤如下: 定义一个预览类 可以参照<android高薪之路>这本书上面,有这种方法的一种完整实现 而对应的ac ...

  3. rbac权限组件整合到实际项目的全过程详述

    rbac简介 项目的GitHub地址 欢迎Download&Fork&Star:https://github.com/Wanghongw/CombineRbac 另外,本文只简单介绍一 ...

  4. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第1节 基本概念_02maven依赖管理的概念

    传统的web项目jar放在项目中,占用磁盘空间 maven项目里面只保存jar包的坐标.jar包文件都在仓库中.扎包重用都在jar包仓库中.

  5. 测开之路一百四十九:jinja2模板之宏

    jinja2是python的模板引擎, 在写python web使用的过程中,macro可以节省大量的代码 比如上一篇的渲染页面 <!DOCTYPE html><html lang= ...

  6. python学习笔记:(六)str(字符串)常用方法

    注意点: 1.字符串是不可变的: 2.%格式化操作符:左侧放置字符串,右侧放置希望被格式化的值. 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应 ...

  7. spotlight监控linux性能

    linux性能监控有很多工具,spotlight只是其中一种 目录 1.安装spotlight 2.参数认识 1.安装spotlight spotlight不仅仅只是监控linux,还可以完成数据库以 ...

  8. delphi assigned函数的用法

    if not Assigned(Modeless) then Assigned()什么意思! assigned 是用来判断某一指针(pointer)或过程引用是否为nil(空),如果为空则返回假(fa ...

  9. oracle data guard --理论知识回顾01

    之前搭建了rac到单实例的dg环境,最近又在windows下搭建了dg,这一篇关于dg的一些理论知识回顾 官方文档 https://docs.oracle.com/cd/E11882_01/nav/p ...

  10. DedeCMS调取其他织梦CMS站点数据库数据方法

    第1步:打开网站include\taglib文件夹中找到sql.lib.php文件,并直接复制一些此文件出来,并把复制出来的这个文件重命名为mysql.lib.php.注:mysql.lib.php, ...