3、Spring IOC&DI使用

基础类型注入

String注入

<property name="str" value="String Type" />

Integer类型

<property name="i" value="15" />

浮点型

<property name="f" value="15.2" />

布尔型

<property name="flag" value="true" />

其他类型注入

List注入

<property name="list">
    <list>
        <value>1</value>
        <value>2</value>
    </list>
</property>

Map注入

<property name="map">
    <map>
        <entry key="id" value="123456" />
        <entry key="name" value="codestd" />
    </map>
</property>

枚举类型注入

枚举类如下

package com.codestd.springstudy.lesson02;

public enum EnumerationType {
    A,B,C
}

第一种:使用FieldRetrievingFactoryBean创建枚举对象。然后注入对象

<bean id="A" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="staticField" value="com.codestd.springstudy.lesson02.EnumerationType.A" />
</bean>

...
<property name="enumType" ref="A" />

第二种:直接注入枚举的名称

<property name="enumType" value="A" />

第一种使用的是ref,是将A对象注入到属性中;而第二种使用的是value,注入的是字符串,然后由Spring通过枚举的valueOf(String)方法获取枚举对象。

构造函数注入

JavaBean代码如下

public class SubBean {

    private String construct;

    public SubBean(){}

    public SubBean(String construct){
        this.construct = construct;
    }

    public String toString(){
        return construct;
    }
}

第一种使用参数名称注入

<bean id="subBean" class="com.codestd.springstudy.lesson02.SubBean">
    <constructor-arg  name="construct" value="Construct Args"/>
</bean>

第二种使用参数索引注入,即参数在构造函数的所有参数的位置。索引从0开始

<bean id="subBean" class="com.codestd.springstudy.lesson02.SubBean">
    <constructor-arg  index="0" value="Construct Args"/>
</bean>

Bean的注入

使用XML配置文件方式

<bean id="subBean" class="com.codestd.springstudy.lesson02.SubBean">
</bean>

<property name="subBean" ref="subBean" />

使用@Resource

@Resource
private SubBean subBean;

使用@Autowire

@Autowired
private SubBean subBean;

@Resource和@Autowire的区别

  • @Autowire可以通过required属性指定是否必须注入,如果required=false当Spring无法从容器中找到与之匹配的对象时就不再注入,且不会报错。@Resource没有这样的参数。
  • 当接口只有一个实现类是@Resource和@Autowire一样,切忽略属性名。即属性名不必与Bean的ID一致。
  • 当接口有两个实现类时,@Resource可以通过name=""和属性名注入,而@Autowire只能通过属性名注入。Spring会根据属性名,从Spring容器中查找与之匹配的Bean,然后注入。
package com.codestd.springstudy.lesson02;

public interface AutowiredTest {

}

package com.codestd.springstudy.lesson02;

import org.springframework.stereotype.Component;

@Component
public class AutowiredTestImpl1 implements AutowiredTest{

}

···
@Autowired
private AutowiredTest autowiredTest;
//等同于
@Resource
private AutowiredTest autowiredTest;

如果多了一个实现类,则用上面的注入方法就不行了。

package com.codestd.springstudy.lesson02;

import org.springframework.stereotype.Component;

@Component
public class AutowiredTestImpl2 implements AutowiredTest {

}

//使用
@Resource(name="autowiredTestImpl1")
private AutowiredTest autowiredTest;
//或
@Resource
private AutowiredTest autowiredTestImpl1;
//或
@Autowired
private AutowiredTest autowiredTestImpl1;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大扑棱蛾子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值