BeanDefinition的定位。對IOC容器來說,它為管理POJO之間的以來關系提供了幫助,但也要依據Spring的定義規則提供Bean定義信息。我們可以使用各種形式的Bean定義信息,其中比較熟悉和常用的是使用xml文件格式。在Bean定義方面,Spring為用戶提供了很大的靈活性。在初始化Ioc的過程中,首先需要定位到這些有效的bean定義信息,這里Spring使用Resource接口來統一這些Bean定義信息,而這個定位由ResourceLoader來完成。
容器的初始化。在使用上下文時,需要對它進行一個初始化的過程,完成初始化之后,這個容器才可以使用。容器的初始化入口是refresh方法(根據具體使用的applicationContext不同)。refresh調用BeanDefinition來完成bean信息的載入和注冊,但是不完成以來注入,除非配置了lazy-init的屬性。否則依賴注入在第一次getBean的時候調用注冊。
這里涉及到一個循環引用(Circular Reference)的問題。
如果A依賴B,并且B依賴A.但兩個類的方法沒有互相調用。 * 如果使用的是Constructor依賴,那么就會拋出Is there an unresolvable circular reference?
的錯誤 * 如果使用是setter方法注入依賴,那么依賴注入是分開的,當需要的時候才會注入。就不會拋出來循環引用的異常。 * 如果是A和B之中的方法還有互相調用,雖然不會拋出來循環引用的異常,但是會拋出棧溢出的異常。
新聞熱點
疑難解答