一。依赖注入
要将PersonDao注入到PersonService中,需要如下的配置:
方式一 ,通过property标签的name属性和ref属性:
<?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">
<property name="personDao" ref="personDao"></property>
</bean>
</beans>
其中<property name="personDao" ref="personDao"></property>
中的name表示需要注入的是哪个属性,ref是需要注入的bean的id。
方法二,通过内部bean标签,这个bean不能被其他组件所引用
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype" init-method="init"
destroy-method="destroy">
<property name="personDao">
<bean class="cn.itcast.dao.impl.PersonDaoBean"/>
</property>
</bean>
如果需要注入的这个属性是一个基本数据类型(包括String)呢?
这时候的配置如下:
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype">
<property name="name" value="jalenTest"></property>
</bean>
同时,PersonService的实现类需要有personDao属性的set方法。
完整代码:
1.服务层:
PersonService.java
package cn.itcast.service;
public interface IPersonService {
/*
* (non-Javadoc)
*
* @see cn.itcast.service.impl.IPersonService#save()
*/
void save();
void add();
}
PersonServiceBean .java
package cn.itcast.service.impl;
import cn.itcast.dao.PersonDao;
import cn.itcast.service.IPersonService;
public class PersonServiceBean implements IPersonService {
private PersonDao personDao;
/*
* (non-Javadoc)
*
* @see cn.itcast.service.impl.IPersonService#save()
*/
/* (non-Javadoc)
* @see cn.itcast.service.impl.IPersonService#save()
*/
@Override
public void save() {
System.out.println("我是save()方法!");
}
private void init() {
System.out.println("初始化方法被调用了");
}
/* (non-Javadoc)
* @see cn.itcast.service.impl.IPersonService#add()
*/
@Override
public void add(){
personDao.add();
}
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
}
2.Dao层:
PersonDao.java
package cn.itcast.dao;
public interface PersonDao {
void add();
}
PersonDaoBean.java
package cn.itcast.dao.impl;
import cn.itcast.dao.PersonDao;
public class PersonDaoBean implements PersonDao {
/* (non-Javadoc)
* @see cn.itcast.dao.impl.PersonDao#add()
*/
@Override
public void add(){
System.out.println("PersonDaoBean的add方法被执行!");
}
}
测试方法:
@Test
public void instanceSpring(){
//初始化Spring容器
AbstractXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IPersonService personService = (IPersonService) ctx.getBean("personService");
personService.add();
//ctx.close();
}
运行结果:
可以看到,如果没有注入成功,则调用add()方法会报空指针异常,这里正常执行,说明注入成功。