Spring学习笔记05–使用构造器装配属性
Spring如何使用构造器装配属性
spring依赖注入的3种方式:
1。使用构造器注入
2。使用属性setter方法注入
3。使用Field注入。(这种方式一般用于注解)
依赖注入对象可以采用
手工装配
或者
自动装配
,在实际应用中建议使用手工装配,因为自动装配会产生未知的情况,开发人员无法预见最终的装配结果。
使用Setter方法注入前面已经演示过了,这里我们演示如何通过构造器来注入属性
package cn.itcast.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import cn.itcast.dao.PersonDao;
import cn.itcast.service.IPersonService;
//需要注入的两个属性
private PersonDao personDao;
private String name;
//创建包含这两个属性的构造器
public PersonServiceBean(PersonDao personDao, String name) {
this.personDao = personDao;
this.name = name;
}
/*
* (non-Javadoc)
*
* @see cn.itcast.service.impl.IPersonService#save()
*/
/* (non-Javadoc)
* 在save()方法中打印name,调用personDao的add()方法,看是否注
* 入成功
*/
@Override
public void save() {
System.out.println(name);
personDao.add();
}
}
beans.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean>-->
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype" init-method="init"
destroy-method="destroy">
<constructor-arg index="0" type="cn.itcast.dao.PersonDao" ref="personDao"/>
<constructor-arg index="1" value="CSDN Jalen"/>
测试方法如下:
@Test
public void instanceSpring(){
//初始化Spring容器
AbstractXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IPersonService personService = (IPersonService) ctx.getBean("personService");
personService.save();
}
运行结果:
总结:
1。使用constructor-arg标签,对构造器属性进行注入。
2。属性说明:
a. index表示构造器中该参数的索引位置;
b. name 表示构造器中该参数的参数名;
c. type 表示参数的类型(基本数据类型可以不指定,其他类类型需要全类名) 。
d. ref和value表示要注入的值,如果type是类类型,则用ref引用其他的bean 的id,如果是基本数据类型,则用value属性。
版权声明:本文为qianwenjun1231原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。