Universe Infinity inc.
什么是IOC容器,先把IOC给忽略到,其实就是个容器。
什么?容器又是个啥玩意?容器是用来放东西的东西啊。
各个领域都喜欢起一些专业术语,显得很高级。给你讲IOC是不是很高级,给你讲Map是不是就明白了。
bean对象最终存储在spring容器中,在spring源码底层就是一个map集合,存储bean的map在DefaultListableBeanFactory类中:
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
Spring容器加载到Bean类时 , 会把这个类的描述信息, 以包名加类名的方式存到beanDefinitionMap 中。
其中 String是Key , 默认是类名首字母小写 ;BeanDefinition , 存的是类的定义(描述信息) , 我们通常叫BeanDefinition接口为 : bean的定义对象。
在Spring的底层,其就是一个Map数据结构。这个Map被大家称为容器,其中存放的是一个个的对象。
那么IOC又是个啥玩意呢?别着急我们一步步来。
IOC容器案例讲解
- 1、小明买苹果准备吃(但是牙口不好),小明买把刀切苹果。
- 2、小明要喝依云山雪水(脑袋进水了吧)。小明要先去买个瓶子,然后乘坐交通工具去依云山,小明在雪山下面等了好久,终于雪化了,灌了一瓶水,高高兴兴回来了。
- 3、小明吃完苹果,看到快过期的依云水,叹了一口气,用依云水冲洗了刀。
- 4、来回跑来跑去,小明累坏了,小明找到了我们
- 5、小明又过来了,说这个空间戒指不能放东西啊
- 6、总结
1、小明买苹果准备吃(但是牙口不好),小明买把刀切苹果。
- 苹果和刀都是给好的,没的说。
class Apple {String desc = "苹果";@Overridepublic String toString() {return "Apple{desc='" + desc + "'}";}
}
class Knife {String desc = "水果刀";void cut(Object object) {System.out.println(this + "切:" + object);}public String toString() {return "Knife{desc='" + desc + "'}";}
}
- 小明要买水果刀吃苹果,这些都要自己去做(这个过程就
new
)
public class Main {@Testpublic void test1() {Apple apple = new Apple(); //小明买苹果准备吃(但是牙口不好)Knife knife = new Knife(); //小明买把刀knife.cut(apple); //小明用刀切苹果}
}
- 输出
Knife{desc='水果刀'}切:Apple{desc='苹果'}
2、小明要喝依云山雪水(脑袋进水了吧)。小明要先去买个瓶子,然后乘坐交通工具去依云山,小明在雪山下面等了好久,终于雪化了,灌了一瓶水,高高兴兴回来了。
- 杯子和水都是给定的,没的说
class Cup {String desc = "杯子";void load(Object object) {System