所谓的控制反转就是[b]应用本身不负责依赖对象的创建以及维护[/b],依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的控制反转。
例如:
1.创建DAO接口
2.创建DAO接口的实现类
3.应用层代码如下:
4.beans.xml
5.测试代码
控制台打印出:this is add() of PersonDaoBean
说明了,应用本身PersonServiceBean不负责PersonDaoBean对象的创建和维护,PersonDaoBean对象的创建和维护由Spring容器负责,PersonDaoBean对象通过依赖注入,注入到应用层PersonServiceBean的属性personDao中。这就是控制反转。
例如:
1.创建DAO接口
package com.bill.dao;
public interface PersonDao {
public void add();
}
2.创建DAO接口的实现类
package com.bill.dao.impl;
import com.bill.dao.PersonDao;
public class PersonDaoBean implements PersonDao {
public void add() {
System.out.println("this is add() of PersonDaoBean");
}
}
3.应用层代码如下:
package com.bill.impl;
import com.bill.PersonService;
import com.bill.dao.PersonDao;
/**
* @author Bill
*/
public class PersonServiceBean implements PersonService {
private PersonDao personDao;
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
public PersonDao getPersonDao(){
return personDao;
}
public void save(){
personDao.add();
}
}
4.beans.xml
<bean id="personDao" class=" com.bill.dao.impl.PersonDaoBean"/>
<bean id="personService" class="com.bill.impl.PersonServiceBean">
<property name="personDao" ref="personDao"></property>
</bean>
5.测试代码
AbstractApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
PersonService personService = (PersonService)act.getBean("personService");
personService.save();
act.close();
控制台打印出:this is add() of PersonDaoBean
说明了,应用本身PersonServiceBean不负责PersonDaoBean对象的创建和维护,PersonDaoBean对象的创建和维护由Spring容器负责,PersonDaoBean对象通过依赖注入,注入到应用层PersonServiceBean的属性personDao中。这就是控制反转。