首页 > 代码库 > ioc(di) 前世今生

ioc(di) 前世今生

ioc inversion of control 控制反转

学习hibernate时第一次接触到这个概念 在hibernate中常用于一对多和多对多关系映射中 inverse=true时表示自身不维护两表之间关系,而由对方维护,常用于数据库crub的优化

 

学习spring时再次接触这个概念 ioc前身就是工厂模式 factory 

 

那么何为工厂模式?

技术分享

老板要获取一件产品,但是自己不想亲自去做(解耦合),交给专门的工人去做,老板要做的就是直接获取成品,从哪获取,从工厂获取 Factory.getxxx()

工厂会提供一个接口,

工人们按照接口标准,制造产品(继承接口方法,实例化对象)  返回给工厂定义的静态方法  这个工作在BeanFactory有spring工厂自动完成

 

dao.getUserDao() 

public static UserDao getUserDao() {
/**
* 给出一个配置文件,文件中给出UserDao接口的实现类名称!
* 我们这个方法,获取实现类的类名,通过反射完成创建对象!
*/
/*
* 得到dao实现类的名称
*/
String daoClassName = props.getProperty("cn.itcast.usermng.dao.UserDao");

/*
* 通过反射来创建实现类的对象 
*/
try {
Class clazz = Class.forName(daoClassName);
return (UserDao)clazz.newInstance();
} catch(Exception e) {
throw new RuntimeException(e);
}
}

  

IOC 控制反转 在这里也叫依赖注入DI  

技术分享

老板不在从工厂中获取需要的产品,而是放一个篮子()定义一个接口) 放在家门口,工厂(容器Container getUserDao)生产好了的商品自动装配到接口

 

从Dao dao=factory.getUserDao()---->Dao dao=null;dao接口由容器自动装配 

 

 

单例 singleton  容器创建时初始化bean 且只创建一个

原型 prototype 容器初始化时不创建bean对象实例化时创建 可创建多个

 

ioc(di) 前世今生