019Spring依赖注入(控制反转IoC)

依赖注入和控制反转一个意思,都是讲由原来主动地new一个对象变成能够被动地获取对象。
依赖注入有如下三种方式
设置注入:IoC容器使用setter方法注入被依赖对象
构造注入:IoC容器使用构造器注入被依赖对象
接口注入:调用者实现特定的接口,并实现接口中特定的方法,而IoC容器会自动检测并调用这个特定的方法,从而完成依赖注入。

设置注入

Spring会根据bean元素里的子元素property里的name属性和value/ref属性来调用bean对象的对应的setter方法为Bean成员变量注入值。
value:当注入的值是标量或String类型时用value指定对应的字符串。Spring会自动转换成对应的实际类型。
ref:当注入的值是Spring容器中的Bean对象时,用ref指定该Bean元素的id。

<bean id="chinese" class="com.lyx.service.Chinese">
      <property name="axe" ref="steelAxe"/>
</bean>
<bean id="stoneAxe" class="com.lyx.service.StoneAxe"/>
<bean id="steelAxe" class="com.lyx.service.SteelAxe"/>

相当于

Chinese c = new com.lyx.service.Chinese();
c.setAxe(new com.lyx.service.SteelAxe());

构造注入

就是创建Bean对象时使用带参数的构造器,通过带参数的构造器完成成员变量初始化。
用N个bean子元素的元素 constructor-arg 为带N个参数的构造器传参。
constructor-arg中属性:
value/ref:参数值,必须指定。
index:手动指定参数排序(从0开始),如果不指定则按constructor-arg元素添加顺序传参。
type:参数类型,用于确定参数类型,可不指定。但有时在选择构造器的时候需要指定。因为对Spring选择构造器时所有的value都是字符串类型,这可能导致Spring选错构造器。

<bean id="chinese" class="com.lyx.service.Chinese">
	<property name="axe" ref="steelAxe"/>
</bean>
<bean id="stoneAxe" class="com.lyx.service.StoneAxe"/>
<bean id="steelAxe" class="com.lyx.service.SteelAxe">
    <constructor-arg value="深灰色" />
    <constructor-arg value=""/>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值