1.构造方法注入

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="person" class="com.thief.demo.Person">
<constructor-arg value="1"/>
<constructor-arg value="Tom"/>
<constructor-arg ref="friend"/>
</bean> <bean id="friend" class="com.thief.demo.Friend">
<constructor-arg value="Jack"/>
</bean>
</beans>

2.setter方法注入

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="person" class="com.thief.demo.Person">
<property name="id" value="1"/>
<property name="name" value="Tom"/>
<property name="friend" ref="friend"/>
</bean> <bean id="friend" class="com.thief.demo.Friend">
<property name="name" value="Jack"/>
</bean>
</beans>

3.<property>和<constructor-arg>中可用的配置项。

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<!-- <value>:为对象注入String类型、基本数据类型和它们的包装器类型的数据 -->
<!-- 示例一 -->
<bean id="person" class="com.thief.demo.Person">
<constructor-arg>
<value>11111</value>
</constructor-arg>
<property name="id">
<value>11111</value>
</property>
</bean>
<!-- 示例二 -->
<bean id="person2" class="com.thief.demo.Person">
<constructor-arg value="11111"/>
<property name="id" value="11111"/>
</bean> <!-- <ref>:引用容器中其他的对象实例 -->
<bean id="person2" class="com.thief.demo.Person">
<constructor-arg ref="friend"/>
<property name="friend" ref="friend"/>
</bean>
<bean id="friend" class="com.thief.demo.Friend">
<property name="name" value="Jack"/>
</bean> <!-- 内部<bean>:如果所依赖的对象只有当前一个对象引用,或者某个对象定义不想其他对象通过<ref>引用到它,这时候就可以使用内部<bean> -->
<bean id="person3" class="com.thief.demo.Person">
<constructor-arg>
<bean class="com.thief.demo.Friend"/>
</constructor-arg>
</bean> <!-- <list>:<list>对应注入对象类型为java.util.List及其子类或者数组类型的依赖对象 -->
<bean id="person4" class="com.thief.demo.Person">
<property name="list">
<list>
<value>11111</value>
<ref bean="friend"/>
<bean class="com.thief.demo.Friend"/>
</list>
</property>
</bean> <!-- <set>:<set>对应注入Java Collection中类型为java.util.Set或者其子类的依赖对象 -->
<bean id="person5" class="com.thief.demo.Person">
<property name="set">
<set>
<value>11111</value>
<ref bean="friend"/>
<bean class="com.thief.demo.Friend"/>
</set>
</property>
</bean> <!-- <map>:<map>对应注入对象类型为java.util.Map或者其子类类型的依赖对象 -->
<bean id="person6" class="com.thief.demo.Person">
<property name="map">
<map>
<entry key="id">
<value>11111</value>
</entry>
<entry key="friend">
<ref bean="friend"/>
</entry>
</map>
</property>
</bean> <!-- <props>: <props>对应配置类型为java.util.Properties的对象依赖 -->
<bean id="person7" class="com.thief.demo.Person">
<property name="props">
<props>
<prop key="id">11111</prop>
<prop key="name">Tom</prop>
</props>
</property>
</bean>
</beans>

4.autowire

除了可以通过配置明确指定bean之间的依赖关系,Spring还提供了根据bean定义的某些特点将相互依赖的某些bean直接自动绑定的功能。通过bean的autowire属性,可以指定当前bean定义采用某种类型的自动绑定模式。这样就无需手工明确指定该bean定义相关的依赖关系,从而也可免去一些手工输入的工作量。

Spring提供了5种自动绑定模式,即no,byName,byType,constructor和autodetect。

• no

容器默认的自动绑定模式,也就是不采用任何形式的自动绑定,完全依赖手工明确配置各个bean之间的依赖关系。

• byName

按照类中声明的实例变量的名称,与XML配置文件中声明的bean定义的beanName的值进行匹配,相匹配的bean定义将被自动绑定到当前实例变量上。

• byType

如果指定当前bean定义的autowire模式为byType,那么,容器会根据当前bean定义类型,分析其相应的依赖对象类型,然后到容器所管理的所有bean定义中寻找与依赖对象类型相同的bean定义,然后将找到的符合条件的bean自动绑定到当前bean定义。

如果找不到,则不做设置。但如果找到多个,容器无法解决“该选用哪一个”的问题,需要你对该问题进行修正。所以,byType只能保证,在容器中只存在一个符合条件的依赖对象的时候才会发挥最大的作用。

• constructor

byName和byType类型的自动绑定模式是针对property的自动绑定,而constructor类型则是针对构造方法参数的类型而进行的自动绑定,它同样是byType类型的绑定模式。不过,constructor是匹配构造方法的参数类型,而不是实例属性的类型。与byType模式类似,如果找到不止一个符合条件的bean定义,那么,容器会返回错误。

• autodetect

这中模式是byType和constructor的结合体,如果对象拥有默认无参数的构造方法,容器会优先考虑byType的自动绑定模式。否则,会使用constructor模式,当然,如果通过构造方法注入绑定后还有其他属性没有绑定,容器也会使用byType对剩余的对象属性进行绑定。

spring 构造方法注入和setter方法注入的XML表达的更多相关文章

  1. SpringBoot 构造器注入、Setter方法注入和Field注入对比

    0. 引入 今天在看项目代码的时候发现在依赖注入的时候使用了构造器注入,之前使用过 Field 注入和 Setter 方法注入,对构造器注入不是很了解.经过查阅资料看到,Spring 推荐使用构造器注 ...

  2. spring构造函数注入、setter方法注入和接口注入

    Spring开发指南中所说的三种注入方式: Type1 接口注入 我们常常借助接口来将调用者与实现者分离.如: public class ClassA { private InterfaceB clz ...

  3. 哪种依赖注入方式你建议使用,构造器注入,还是 Setter方法注入?

    你两种依赖方式都可以使用,构造器注入和Setter方法注入.最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖.

  4. Spring第六弹—-依赖注入之使用构造器注入与使用属性setter方法注入

    所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中. 使用构造器注入   1 2 3 4 <constructor-arg index=“0” type=“java.lang. ...

  5. spring setter方法注入

    <bean id="dao" class="Dao"></bean> <bean id="service" c ...

  6. bean的装配方式(注入方式,构造注入,setter属性注入)

    bean的装配方式有两种,构造注入和setter属性注入. public class User { private String username; private String password; ...

  7. id、name、setter方法注入、构造方法注入、工厂方法注入、注解注入、方法注入、方法替换、Web作用域、普通bean引用Web作用域的bean

    spring IoC的id和name id的命名需要满足XML对id的命名规范,必须以字母开始,后面可以是字母.数字.连字符.下画线.句号.冒号等等号,但逗号和空格是非法的.如果用户确实希望用一些特殊 ...

  8. Spring揭秘 读书笔记 四----方法注入

    我们知道,拥有prototype类型scope的bean,在请求方每次向容器请求该类型对象的时候,容器都会返回一个全新的该对象实例. 我们看下面的例子: public class MockNewsPe ...

  9. spring依赖注入之构造函数注入,set方法注入

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

随机推荐

  1. VUE -- 自定义控件(标签)

    首先我们在 src目录下新建一个目录 叫”component”,建一个mycomponent.vue文件,然后也让他打2句话吧 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 ...

  2. 机器学习第2课:单变量线性回归(Linear Regression with One Variable)

    2.1  模型表示 之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示: 我们将要用来描述这个回归问题的标记如下: m                代表训练集中实 ...

  3. linux系统预留内存和磁盘大小

    默认情况下, Linux 会最多使用 40% 的可用内存作为文件系统缓存.当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的 IO 请求都是同步的. 将缓存写入磁盘时,有一个默认1 ...

  4. lodash 移除假值数组 compact

    创建一个移除了所有假值的数组.例如:false.null. 0."".undefined, 以及NaN 都是 “假值”. <!DOCTYPE html> <htm ...

  5. HDU-1047-Integer Inquiry(Java大数水题 &amp;&amp; 格式恶心)

    Integer Inquiry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. smali 语法参考

    原文见:http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html Dalvik opcodes Author: Gabor Pa ...

  7. DevOps开源工具的三种分类整理

    原文地址:http://www.360doc.com/content/16/0322/07/31263000_544210096.shtml 随着开发运维一体化的DevOps运动在国内外蓬勃发展,De ...

  8. Linux服务器重启后启动Oracle服务

    目录 1. 启动Oracle服务 2. 启动Oracle监听服务 © 版权声明:本文为博主原创文章,转载请注明出处 1. 启动Oracle服务 重启Linux服务器后,Oracle服务还需要手动启动. ...

  9. CSS3:选择器

    CSS选择器的作用是找出某类元素,以便我们使用style元素或者外部样式表对这类元素设置样式. 基本选择器 选择器 含义 演示样例 描写叙述 * 选择全部元素 * { border: thin bla ...

  10. Spark高速上手之交互式分析

    1.1  Spark交互式分析 执行Spark脚本前,启动Hadoop的HDFS和YARN.Spark的shell提供 了简单方式去识别API.相同也有一个强大的工具去交互式地分析数据. 两种语言有这 ...