DI依赖注入的三种类型和两种方式

DI可以注入三种类型的数据

1.基本数据类型和String

参考注入方式一

2.引用类型

参考注入方式二

3.复杂一点的集合类型 List Set Map

代码:
<!--   注入集合类型数据
       <list><set>
       <map><props>

-->

   <bean id="userDao3" class="com.fjr.di.UserDaoImpl" >
      <property name="list">
         <list>
            <value type="java.lang.String">冯洁茹</value>
            <value type="java.lang.String">张灿</value>
         </list>
      </property>
      <property name="set">
         <set>
            <value type="java.lang.String">陈粒</value>
            <value type="java.lang.String">陈奕迅</value>
         </set>
      </property>
      <property name="map">
         <map>
            <entry key="爱好" value="游戏"></entry>
            <entry key="游戏名" value="LOL"></entry>
         </map>
      </property>
      <property name="properties">
         <props>
            <prop key="身高">168cm</prop>
            <prop key="年龄">18</prop>
         </props>
      </property>

   </bean>

DI的两种注入方式

1.构造方法注入

在bean标签内部使用 constructor-arg标签

type属性:使用类型指定构造方法中参数的类型

index属性:使用构造方法中参数索引值来 进行注入

name属性 :使用构造方法中参数名称 来注入 ( 常用!)

value属性:要注入的值(基本数据类型和String类型)

ref属性:要注入的值(引用在IOC容器中其他的bean对象)

优点:创建时必须要指定构造方法中的全部参数,bean才能被创建,保证了对象创建出来之后,成员变量一定都有值

缺点:必须要指定全部参数,否则无法创建,使用该方式改变了对象的创建过程

代码:
<bean id="userDao1" class="com.fjr.di.UserDaoImpl">
   <constructor-arg name="name" value="冯洁茹"/>
   <constructor-arg name="age" value="18"/>
   <constructor-arg name="birthday" ref="now"/>
</bean>
<!--   创建一个Date类型的对象-->
<bean id="now" class="java.util.Date" ></bean>

2.setter方法注入

必须要有一个无参的构造方法,否则只能用构造方法构造

name属性:指定要注入的属性值 使用的是setter方法名中去掉set三个字母后的字符串首字母小写后的字符串

value属性:

ref属性:

优点:创建时无需指定什么参数,不会限制对象的创建

缺点:在某些场景中,必须要保证对象创建时有某些成员变量的值,无法保证

代码:
<bean id="userDao2" class="com.fjr.di.UserDaoImpl">
   <property name="name" value="冯洁茹"/>
   <property name="age" value="19"/>
   <property name="birthday" ref="now"/>
</bean>
public class AccountImpl implements AccountDao {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值