大家知道spring吗?Spring有两个重要的部分,分为spring IOC以及spring AOP,今天小编给大家解说的则是spring IOC机制,以及原理,就让我们一起来了解下吧。
Spring IOC:一句话来表达就是控制反转,将对象的依赖关系交给容器进行处理。以一个案列来展开:从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。在spring容器中通过配置一个一个的bean来实现对象的创建和控制,使程序解耦。控制反转后,对象之间的依赖关系还是存在的,但配置对象的工作应该由容器负责,由容器动态的将某种依赖关系注入到组件之中。
spring IOC的实现方式有两种,通过xml文件配置和注解的方式(注解方式企业最为常用),要理解IOC的原理是怎么实现的,我们就会涉及到spring的底层源码,很多看到框架或者源码头就开始大了,其实并不大家想想得那么难。BeanFactory代码解析开始,它是IOC的顶级接口,开企业级开发中基本用,它是老的版本了,功能有些欠缺,常用的是ApplicationContext
IOC容器的启动分为两个步骤,第一创建BeanFactory,第二实例化Bean对象。首先大家通过FileSystemXmlAppcationContext发现它只要完成的是三个步骤:初始化父容器的AbstractAppcationContext、设置资源文件的位置setConfinLonation还有就是使用核心方法refresh(),然后AbstractAppcationContext.refresh()方法接口定义了refresh()方法的,注意只是个模板方法而已,并没有什么逻辑,模板方法的核心才是refresh()的,它最核心主要是:创建BeanFactory和实例化Bean的。
分析创建BeanFactory的是怎么实现的,重点就是AbstractAppcationContext.obtainFreshBeanFactory()这个方法,它主要是完成了刷新BeanFactory即regfreshBeanFactory()和获取BeanFactory即getBeanFactory(),然而大家发现,refreshBactory()方法实现中,是先检查当前上下是否存在BeanFacory的,如存在BeanFactory,先销毁Bean和BeanFactory,然后他在创建新的BeanFactory。
实例化Bean,其实在创建BeanFactory时,BeanDefinittion注册到了BeanFactory中的一个ConcurrentHashMap对象中的,并且以key为BeanName,value是BeanDefiniition的。
以上就是今天小编所讲的java一些知识问答,希望能帮助到大家,想要了解更多,请继续关注本网站。