<property name="str" value="String Type" />
<property name="i" value="15" />
<property name="f" value="15.2" />
<property name="flag" value="true" />
<property name="list">
<list>
<value>1value>
<value>2value>
list>
property>
<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 id="subBean" class="com.codestd.springstudy.lesson02.SubBean">
bean>
<property name="subBean" ref="subBean" />
@Resource
private SubBean subBean;
@Autowired
private SubBean subBean;
required
属性指定是否必须注入,如果required=false
当Spring无法从容器中找到与之匹配的对象时就不再注入,且不会报错。@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;