依赖注入与自动装配

依赖注入:当一个类的实例需要另一个类的实例协助时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。然而采用依赖注入的方式,创建被调用者的工作不再由调用者来完成,因此叫控制反转,创建被调用者的实例的工作由IoC容器来完成,然后注入调用者,因此也称为依赖注入。依赖注入的方式有两种:构造器注入和setter注入。

装配:创建应用对象之间协作关系的行为称为装配。也就是说当一个对象的属性是另一个对象时,实例化时,需要为这个对象属性进行实例化。这就是装配。

自动装配:开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成。与自动装配配合的还有“自动检测”,这个动作会自动识别哪些类需要被配置成bean,进而来进行装配。这样我们就明白了,自动装配是为了将依赖注入“自动化”的一个简化配置的操作。

依赖注入与装配的关系:依赖注入的本质就是装配,装配是依赖注入的具体行为。

装配分为五种:no,default,byName, byType, constructor。

构造注入

<bean id="service" class="com.abc.InfoService">
	<constructor-arg ref="infoDao"></constructor-arg>
</bean>

<bean id="infoDao" class="com.abc.InfoDao">
</bean>

setter注入

<bean id="service" class="com.abc.InfoService">
<property name="info" ref="infoDao"></property>
</bean>
<bean id="infoDao" class="com.abc.InfoDao">
</bean>

以下介绍基本类型和集合类型的注入

Integer与String注入

<bean id="dao" class="com.abc.InfoDao">
<property name="id">
   <value>1</value>
</property>
<property name="name">
   <value >tom</value>
</property>
</bean>

List注入

<bean id="service" class="com.abc.InfoService">
 <constructor-arg name="info" ref="dao"></constructor-arg>
 <constructor-arg name="info2" ref="dao"></constructor-arg>
 <property name="list">
   <list>
      <ref bean="dao" />
      <ref bean="dao" />
      <ref bean="dao" />
      <ref bean="dao" />
   </list>
 </property>
</bean>
<bean id="dao" class="com.abc.InfoDao">
 <property name="id">
   <value>1</value>
 </property>
 <property name="name">
   <value>pioneer</value>
 </property>
</bean>

Set注入

<bean id="service" class="com.abc.InfoService">
  <constructor-arg name="info1" ref="dao"></constructor-arg>
  <constructor-arg name="info2" ref="dao"></constructor-arg>
  <property name="set">
    <set>
        <bean class="com.abc.InfoDao">
         <property name="id">
           <value>1</value>
         </property>
         <property name="name">
           <value>tom</value>
         </property>
        </bean>
        <bean class="com.abc.InfoDao">
         <property name="id">
           <value>2</value>
         </property>
         <property name="name">
          <value>kitty</value>
         </property>
        </bean>
     </set>
   </property>
</bean>

Map注入

<bean id="service" class="com.abc.InfoService">
  <constructor-arg name="info1" ref="dao"></constructor-arg>
  <constructor-arg name="info2" ref="dao"></constructor-arg>
  <property name="maps">
	<map>
            <entry key="one" value="First"></entry>
            <entry key="two" value="Second"></entry>
            <entry key="three" value="third"></entry>
	</map>
  </property>
</bean>

Properties注入

<bean id="service" class="com.abc.InfoService">
  <constructor-arg name="info1" ref="dao"></constructor-arg>
  <constructor-arg name="info2" ref="dao"></constructor-arg>
  <property name="maps">
	<property name="properties">
		<props>
			<prop key="url">htttp://www.google.com.hk</prop>
			<prop key="username">username</prop>
			<prop key="password">password</prop>
		</props>
	</property>
  </property>
</bean>

 

转载于:https://my.oschina.net/pioneerDev/blog/887132

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值