IOC又称DI(依赖注入),是对传统流程的一种颠覆。当某个实例需要另一个实例协助时,在传统的程序设计中,通常由调用者创建被调用者的实例。但在IOC中,创建被调用者的工作不再由调用者来完成,而是由容器来完成(例如Spring),而不再是调用者,所以说控制被反转了,称为控制反转。
1、传统设计
(1)应用层:
package xie.ioc;
public class App {
public static void main(String[] args) {
String name = "hello word";
Service service = new Service();
service.service(name);
}
}
(2)、Service层
package xie.ioc;
public class Service {
private Dao dao = new Dao();
public void service(String words){
dao.say(words);
}
}
(3)、DAO层
package xie.ioc;
public class Dao {
public void say(String words){
System.out.println(words);
}
}
2、控制反转
(1)、IDao
package xie.ioc1;
public interface IDao {
public String say(String words);
}
(2)、DaoImpl
package xie.ioc1;
public class DaoImpl implements IDao{
public String say(String words) {
// TODO Auto-generated method stub
return words;
}
}
(3)、IService
package xie.ioc1;
public interface IService {
public void service(String words);
}
(4)、ServiceImpl
package xie.ioc1;
public class ServiceImpl implements IService {
private IDao dao;
public void service(String words) {
// TODO Auto-generated method stub
System.out.println(dao.say(words));
}
public IDao getDao() {
return dao;
}
public void setDao(IDao dao) {
this.dao = dao;
}
}
(5)、Test
package xie.ioc1;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class Test {
public static void main(String[] args) {
String words = "hello world";
XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
IService service = (IService) factory.getBean("service");
service.service(words);
}
}
(6)、applicationContext.xml