DefaultSingletonBeanRegistry 的registerDependentBean()方法对属性注入
生活随笔
收集整理的這篇文章主要介紹了
DefaultSingletonBeanRegistry 的registerDependentBean()方法对属性注入
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//為指定的Bean注入依賴的Bean
public void registerDependentBean(String beanName, String dependentBeanName) {// A quick check for an existing entry upfront, avoiding synchronization...//處理Bean名稱,將別名轉換為規范的Bean名稱String canonicalName = canonicalName(beanName);Set<String> dependentBeans = this.dependentBeanMap.get(canonicalName);if (dependentBeans != null && dependentBeans.contains(dependentBeanName)) {return;}// No entry yet -> fully synchronized manipulation of the dependentBeans Set//多線程同步,保證容器內數據的一致性//先從容器中:bean名稱-->全部依賴Bean名稱集合找查找給定名稱Bean的依賴Beansynchronized (this.dependentBeanMap) {//獲取給定名稱Bean的所有依賴Bean名稱dependentBeans = this.dependentBeanMap.get(canonicalName);if (dependentBeans == null) {//為Bean設置依賴Bean信息dependentBeans = new LinkedHashSet<>(8);this.dependentBeanMap.put(canonicalName, dependentBeans);}//向容器中:bean名稱-->全部依賴Bean名稱集合添加Bean的依賴信息//即,將Bean所依賴的Bean添加到容器的集合中dependentBeans.add(dependentBeanName);}//從容器中:bean名稱-->指定名稱Bean的依賴Bean集合找查找給定名稱Bean的依賴Beansynchronized (this.dependenciesForBeanMap) {Set<String> dependenciesForBean = this.dependenciesForBeanMap.get(dependentBeanName);if (dependenciesForBean == null) {dependenciesForBean = new LinkedHashSet<>(8);this.dependenciesForBeanMap.put(dependentBeanName, dependenciesForBean);}//向容器中:bean名稱-->指定Bean的依賴Bean名稱集合添加Bean的依賴信息//即,將Bean所依賴的Bean添加到容器的集合中dependenciesForBean.add(canonicalName);}
}
通過對autowiring 的源碼分析,我們可以看出,autowiring 的實現過程:
a、對Bean 的屬性代調用getBean()方法,完成依賴Bean 的初始化和依賴注入。
b、將依賴Bean 的屬性引用設置到被依賴的Bean 屬性上。
c、將依賴Bean 的名稱和被依賴Bean 的名稱存儲在IOC 容器的集合中。
Spring IOC 容器的autowiring 屬性自動依賴注入是一個很方便的特性,可以簡化開發時的配置,但是凡是都有兩面性,自動屬性依賴注入也有不足,首先,Bean 的依賴關系在配置文件中無法很清楚地看出來,對于維護造成一定困難。其次,由于自動依賴注入是Spring 容器自動執行的,容器是不會智能判斷的,如果配置不當,將會帶來無法預料的后果,所以自動依賴注入特性在使用時還是綜合考慮。
?
總結
以上是生活随笔為你收集整理的DefaultSingletonBeanRegistry 的registerDependentBean()方法对属性注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring IOC 容器根据Bean
- 下一篇: 再述Spring AOP 应用场景