javascript
Spring框架—IoC容器
首先我們需要了解一下是什么是IoC。IoC是Spring的核心技術之一,全稱是Inversion of Control(控制反轉)。最原始的創建對象的方法就是通過new來實現(手動的編寫代碼實現),而Spring提供了Ioc容器用于對象的創建以及配置、管理、銷毀等。
容器啟動的時候,讀取配置文件,基于配置文件的信息初始化(創建)對象。容器一啟動就創建對象的好處是:使用的時候就不用創建了,直接從容器中獲取比使用時創建性能好。弊端是:不使用對象但是創建了對象,占用內存。
new?Hollow();當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象,這樣做降低了類之間的耦合程度。不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
一、容器?
從程序的角度,容器實際上就是某些特定接口的實現類的實例。spring容器可歸為兩類:
- BeanFactory容器:bean工廠(org.springframework.beans.factory.BeanFactory), 提供簡單DI支持
- ApplicationContext容器:應用上下文(org.springframework.context.ApplicationContext),基于BeanFactory構建,并提供框架服務,如配置解析,主流使用的是功能更加強大的應用上下文(ApplicationContext)
二、Spring BeanFactory 容器
BeanFacotry是spring中比較原始的Factory。如XMLBeanFactory就是一種典型的BeanFactory。原始的BeanFactory無法支持spring的許多插件,如AOP功能、Web應用等。?ApplicationContext接口,它由BeanFactory接口派生而來,ApplicationContext包含BeanFactory的所有功能,通常建議比BeanFactory優先。
代碼:
public interface BeanFactory {String FACTORY_BEAN_PREFIX = "&";Object getBean(String var1) throws BeansException;<T> T getBean(String var1, Class<T> var2) throws BeansException;Object getBean(String var1, Object... var2) throws BeansException;<T> T getBean(Class<T> var1) throws BeansException;<T> T getBean(Class<T> var1, Object... var2) throws BeansException;<T> ObjectProvider<T> getBeanProvider(Class<T> var1);<T> ObjectProvider<T> getBeanProvider(ResolvableType var1);boolean containsBean(String var1);boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;@NullableClass<?> getType(String var1) throws NoSuchBeanDefinitionException;String[] getAliases(String var1); }- getBean方法:從容器中獲取Bean對象
- is方法:bean類型的判斷
- get方法:獲取Bean類型和別名
三、ApplicationContext 的主要實現類
- ClassPathXmlApplicationContext:從 類路徑下加載配置文件
- FileSystemXmlApplicationContext: 從文件系統中加載配置文件
- ConfigurableApplicationContext:?擴展于?ApplicationContext,新增加兩個主要方法:refresh() 和 close(), 讓?ApplicationContext 具有啟動、刷新和關閉上下文的能力
- ApplicationContext?:在初始化上下文時就實例化所有單例的 Bean。
- WebApplicationContext: 是專門為 WEB 應用而準備的,它允許從相對于 WEB 根目錄的路徑中完成初始化工作
直白一點,就是五種常見加載方式? Application context = new 某種Context(參數傳資源位置: 如"a.b.c.class" / "F:/config.xml" / "config.xml"? 等等)
總結
以上是生活随笔為你收集整理的Spring框架—IoC容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见索引结构—二叉搜索树
- 下一篇: Spring框架—SpringBean配