这里就不再介绍Spring的IOC是什么了,我们直接开始写代码吧,不知道的可以看一下百度百科中关于IOC的介绍.
划清层次
在Spring
中,由于所有的引用都是通过IOC来解耦合的,我们在实现这个容器之前,需要先通过我们平常对容器的使用,来反推一下Spring
内部的实现过程.
大致可以分为:
- 将需要实例化的对象标记(注解方式)或着是定义好实体类,将对象注入(xml方式)
- 直接使用
这样,我们就直接将一个对象的实例化和使用解耦合了.期间的所有工作都由spring
容器进行完成.
推测如何实现
通过我们的使用,可以很简单的想出:
-
spring
内部维护有一个容器,来管理所有的实例化对象 - 这个容器具有最基本的保存对象,取出对象等方法.
代码实现
由于需要按对象名称取出对象,所以我们可以用一个Map
容器来实现.
我们定义一个最基本的类BeanFactory
BeanFactory
作为基本的容器,来管理对象
代码如下
public class BeanFactory {
private Map<String, Object> beanDefinitionMap = new ConcurrentHashMap<>();
public Object getBean(String beanName) {
return beanDefinitionMap.get(beanName);
}
public void setBean(String beanName, Object bean) {
beanDefinitionMap.put(beanName, bean);
}
}
这样,就完成了一个最简单IOC容器,只是对Map
简单封装了一下,当然还有很多功能没做,我们就逐渐完善这个类,直到实现一个功能完善的IOC容器.
网友评论