您的位置:首页 > 编程语言 > Java开发

3、Spring IOC&DI使用

2016-05-22 17:31 441 查看

基础类型注入

String注入

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


Integer类型

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


浮点型

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


布尔型

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


其他类型注入

Map注入

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


List注入

<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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: