spring ioc
1、关于IOC容器
无spring之前创建对象用传统的new关键字,对象之间的依赖性比较强,耦合度高,自己去管理bean,spring ioc主要是提供了对象容器来管理对象和对象之间的关系,spring ioc叫控制反转或者依赖注入。
2、IOC实现需要哪些元素
大家想,如果让你来写一个spring ioc会怎么写?
首先需要一个容器来装对象(AppliactionContext、BeanFactory),要用的时候直接从AppliactionContext,那对象是怎么创建的呢?举例用spring xml bean来配置对象
如:
<bean id="customerVO" class="com.fxr.vo.CustomerVO">
<property name="name" value="test"></property>
</bean>
-----------------------------------------
Resource
BeanDefinition 管理基于spring的应用中的各种对象以及它们之间的相互依懒关系,抽象的定义了bean的定义。
BeanDefinitionReader
BeanFactory简单实现容器系列,这系列容器只实现了容器的最基本功能。
ApplicationContext 应用上下文,作为容器的高级形态存在,应用上下文在简单容器的基础之上,增加了许多面向框架的特性,同时对应用环境做了许多适配。
以上五个都是接口,都有各式各样的实现,正是这5个接口定义了spring ioc容器的基本代码组件结构。而其组件各种实现的组合关系组成了一个运行时的具体容器。
ClassPathResource cpr = new ClassPathResource("/applicationContext.xml"); DefaultListableBeanFactory dlb = new DefaultListableBeanFactory(); XmlBeanDefinitionReader xdr = new XmlBeanDefinitionReader(dlb);
xdr.loadBeanDefinitions(cpr);
CustomerVO customerVO = (CustomerVO) dlb.getBean("customerVO"); System.out.println(customerVO.getName());
IOC容器加载简单过程:
1、Resource定位过程。
2、BeanDefinition的载入(把用户定义好的Bean表示成IOC容器的内部结构)
3、向IOC容器注册BeanDefinition的过程。 (把BeanDefinition向IOC进行注册,实际是放入到了HashMap中)