1. 程式人生 > >sping IOC和DI 你應該知道事情1

sping IOC和DI 你應該知道事情1

spa oschina rabl logs abstract pri ati lap 好的

springIOC和spring DI作為spring core的核心思想,有必要學習下才能更好的使用spring

===================================================================================

AbstractXmlApplicationContext abstractXmlApplicationContext=new ClassPathXmlApplicationContext("spring/springioc.xml");

abstractXmlApplicationContext.getBean("animal", AnimalFactoryBean.class);

1.spring ioc是什麽?

spring ioc 翻譯成中文就是控制反轉,在spring中的本質是BeanFactory,具體在DefaultListableBeanFactory 類中beanDefinitionMap,存放著所有需要初始化的bean的信息,更具體一點,指的是被<bean>標簽和@Configuration,@Bean等註解修飾的類. BeanDefinition 是被解析出來的bean的屬性,包括單例,作用域等.可以說,ioc本身只做三件事情,定位資源eg:"spring/springioc.xml",解析每個bean的屬性封裝成BeanDefinition ,註冊BeanDefinition 到beanDefinitionMap.解析的過程較為復雜...

2.什麽是DI

DI就是依賴註入,依賴註入是每個bean實例化的時候,如果屬性依賴其他對象,需要實例化其他對象,實例化的過程交由spring 來完成,實例化後的存放在DefaultSingletonBeanRegistry 類 singletonObjects(map),屬性中DefaultListableBeanFactory實現了DefaultSingletonBeanRegistry

依賴註發生的時機

2.1.abstractXmlApplicationContext.getBean("animal", AnimalFactoryBean.class);

2.2<bean>非懶加載和@Configuration,@Bean等註解

3.spring 啟動過程,ioc和di在哪裏開始執行的

點開ClassPathXmlApplicationContext的構造方法,發現主要是refresh()方法 ioc主線

ConfigurableListableBeanFactory beanFactory = this.obtainFreshBeanFactory();-->this.refreshBeanFactory();-->this.loadBeanDefinitions(beanFactory);

dI主線refresh()開始

this.finishBeanFactoryInitialization(beanFactory);-->beanFactory.preInstantiateSingletons();-->getBean(beanName);

4.spring DI什麽時候使用cglib 策略產生bean(lookup-method 和 replace-method)?

http://blog.sina.com.cn/s/blog_4ada12a50100l3ap.html

https://www.cnblogs.com/ViviChan/p/4981619.html

源碼http://blog.51cto.com/dba10g/1726519

流程:http://www.importnew.com/24254.html

https://my.oschina.net/iioschina/blog/837899

https://www.cnblogs.com/aspirant/p/9082858.html

https://www.cnblogs.com/davidwang456/p/4187012.html

https://www.cnblogs.com/ITtangtang/p/3978349.html

https://my.oschina.net/u/206123/blog/1553564

sping IOC和DI 你應該知道事情1