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. Linux文件压缩与解压命令

    1  .zip 格式压缩与解压 压缩命令 zip 压缩文件名 源文件 zip  -r   压缩目录名       源目录 解压命令 unzip 文件名 td@td-Lenovo-IdeaPad-Y41 ...

  2. apache的order allow deny

    这个东西确实挺容易让我们迷糊.其实也不难,只要你掌握这样一条规律即可:首先举个例子: Order deny,allowdeny  from allallow from 127.0.0.1 我们判断的依 ...

  3. 转换流的使用(InputStreamReader,OutputStreamWriter)

    我们如何设置字节输入流.字节输出流的编码和解码格式? 在字节输入流(InputStream).字节输出流(OutputStream)中,并没有提供设置编码和解码格式的方法. InputStream的A ...

  4. Ubuntu系统日志

    一.指定系统日志路径到:  /var/log/messages 1.默认系统日志 root@HDController:~# tail -1000 /var/log/syslog Oct 20 06:2 ...

  5. django 分页django-pure-pagination

    虽然django自带了一个paginator,但不是很方便,我们使用django-pure-pagination github地址https://github.com/jamespacileo/dja ...

  6. .Net强大的列表控件XPTable [转]

    .Net强大的列表控件XPTable http://blog.csdn.net/bodybo/article/details/7359531 XPTable的大名,想必C#开发的人都有所耳闻,使用下来 ...

  7. Spark 2.0 DataFrame map操作中Unable to find encoder for type stored in a Dataset.问题的分析与解决

    转载:http://blog.csdn.net/sparkexpert/article/details/52871000 随着新版本的spark已经逐渐稳定,最近拟将原有框架升级到spark 2.0. ...

  8. 2017.6.27 jdbc基本使用

    参考来自:http://www.runoob.com/w3cnote/jdbc-use-guide.html 1.jdbc的执行流程 JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系 ...

  9. red5截屏

    在red5-web.xml添加 <bean id="rtmpSampleAccess" class="org.red5.server.stream.RtmpSamp ...

  10. DNS检测

    dig @58.241.41.152 6900255264940.barcode.cniotroot.cn naptr 没有naptr 好像有点异常 select count(*) as total ...