Spring容器的依赖注入方式(一)
PersonServiceBean类中有一个PersonDao的属性,现在需要将PersonDaoImpl类的实例通过Spring容器注入到PersonServiceBean类中。
?? ?PersonDao.java
package com.risetek.dao;public interface PersonDao {public abstract void add();public abstract void save();}?????PersonDaoImpl.java
package com.risetek.dao.impl;import com.risetek.dao.PersonDao;public class PersonDaoImpl implements PersonDao {@Overridepublic void add(){System.out.println("add...");}@Overridepublic void save(){System.out.println("save...");}}?? PersonService.java
package com.risetek.service;public interface PersonService {public abstract void add();public abstract void save();}??? PersonServiceBean.java
package com.risetek.service.impl;import com.risetek.dao.PersonDao;import com.risetek.service.PersonService;public class PersonServiceBean implements PersonService {private PersonDao personDao;@Overridepublic void save(){this.personDao.save();}@Overridepublic void add() {this.personDao.add();}}?
方式一:让spring容器通过属性的setter方法进行注入,因此PersonServiceBean中必须提供属性的set方法
?? ?PersonServiceBean.java
public class PersonServiceBean implements PersonService {....public void setPersonDao(PersonDao personDao) {this.personDao = personDao;} ....}??? 要让容器创建PersonDaoImpl的实例,必须要将PersonDaoImpl交给容器管理,才能进行依赖注入:
??? 此时有两种方式配置beans.xml:
??? 1.通过内部Bean的形式配置
<bean id="personServiceBean" name="code"><!-- 将需要注入的类型交给spring管理 --><bean name="personDao" ref="personDao"/></bean>
?
方式二:通过类的构造器进行注入,因此PersonServiceBean需要提供构造方法
??? PersonServiceBean.java
public class PersonServiceBean implements PersonService { .....public PersonServiceBean(PersonDao personDao){this.personDao = personDao;} .....}????配置beans.xml文件:
<!-- 将需要注入的类型交给spring管理 --><bean name="personDao" type="com.risetek.dao.PersonDao" ref="personDao"/></bean>
??? 同样也可以使用内部Bean的形式注入PersonDaoImpl对象
<bean id="personServiceBean" class="com.risetek.service.impl.PersonServiceBean"><!-- index为构造器参数索引 --><constructor-arg index="0"><bean class="com.risetek.dao.impl.PersonDaoImpl"></bean></constructor-arg></bean>
?
?