1、说明
constructor-arg:通过构造函数注入。
public Student(Integer id, String name, List<String> dream,Map<String, Integer> score, boolean graduation) {}
<constructor-arg name="id" value="1"/>
property:通过setter对应的方法注入。
public void setId(Integer id) {this.id = id;}
<property name="id" value="1"></property>
2、constructor-arg的使用示例
几种注入方式:
a.按参数类型传给构造方法注入[ Constructor Argument Type Matching ]
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg type="int" value="7500000"/>
<constructor-arg type="java.lang.String" value="42"/>
</bean>
b.按参数索引传给构造方法注入(索引从0开始)[ Constructor Argument Index ]
<bean id="exampleBean" class="examples.ExampleBean">
<constructor-arg index="0" value="7500000"/>
<constructor-arg index="1" value="42"/>
</bean>
c.name方式
<property name="integerProperty" value="1"/>
d.ref引用方式
<property name="beanTwo" ref="yetAnotherBean"/>
(1)、Model代码:
public class Student {
private Integer id;
private String name;
private List<String> dream;
private Map<String, Integer> score;
private boolean graduation;
public Student() {
}
public Student(Integer id, String name, List<String> dream,
Map<String, Integer> score, boolean graduation) {
this.id = id;
this.name = name;
this.dream = dream;
this.score = score;
this.graduation = graduation;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", dream=" + dream
+ ", score=" + score + ", graduation=" + graduation + "]";
}
}
(2)、xml配置:
<bean id="student" class="com.rc.sp.Student">
<constructor-arg name="id" value="1"/>
<constructor-arg name="name" value="student"/>
<constructor-arg name="dream">
<list>
<value>soldier</value>
<value>scientist</value>
<value>pilot</value>
</list>
</constructor-arg>
<constructor-arg name="score">
<map>
<entry key="math" value="90"/>
<entry key="english" value="85"/>
</map>
</constructor-arg>
<constructor-arg name="graduation" value="false"/>
</bean>
说明:也可以改成方式;boolean的值既可以用0/1填充,也可以用true/false填充。
这我还有一个自己的示例:
<bean id="jedisUtils" class="cms.common.util.JedisUtils" >
<constructor-arg type="java.lang.String" value="classpath:application.properties" />
</bean>
这里 constructor-arg 其实是可以直接带参数的
public final class JedisUtils {
private JedisPool jedisPool = null;
private Map<String, String> config = null;
private JedisProxy jedisProxy = null;
public JedisUtils(String path){
Map<String, String> config = null;
try {
config = MiscUtils.convertPropertiesFileToMap(path);
} catch (Exception e) {
}
if(config==null){
config = new HashMap<String,String>();
}
this.config=config;
}
}
constructor-arg属性通过指定type 类型来调用对应的构造函数,
这里是通过构造函数来初始化 jedis 对象
调用时
@Autowired(required=true)
private JedisUtils jedisUtils;
这主要是实现了通过配置文件注入jedis对象。
3、property的使用示例
(1)、Model代码:
public class Teacher {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
}
(2)、xml配置:
<bean id="teacher" class="com.rc.sp.Teacher">
<property name="id" value="1"></property>
<property name="name" value="teacher"></property>
</bean>
4、Test
(1)、测试代码:
public class Run {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Student student = (Student) context.getBean("student");
System.out.println(student);
Teacher teacher = (Teacher) context.getBean("teacher");
System.out.println(teacher);
}
}
(2)、输出结果:
Student [id=1, name=student, dream=[soldier, scientist, pilot],score={math=90, english=85}, graduation=false]
Teacher [id=1, name=teacher]