這些aware的作用都可以從命名得知
aware
的處理
其中beannameaware
、beanclassloaderaware
和beanfactoryaware
這三個是直接在bean的初始化之前就處理了的,具體**在abstractautowirecapablebeanfactory.initializebean
方法中:
protected object initializebean(string beanname, object bean, rootbeandefinition mbd)
if (bean instanceof beanclassloaderaware)
if (bean instanceof beanfactoryaware)
// 開始bean初始化前處理、初始化、初始化後處理
if (mbd == null || !mbd.issynthetic())
try
catch (throwable ex)
if (mbd == null || !mbd.issynthetic())
}
除了這三種之外的那些aware介面的實現就不太一樣了,它們都是利用beanpostprocessor
介面完成的,關於beanpostprocessor
介面的原理可以這篇文章:spring擴充套件點之beanpostprocessor
public object postprocessbeforeinitialization(final object bean, string beanname) throws bean***ception
if (acc != null) , acc);
} else
return bean;
} private void invokeawareinte***ces(object bean)
if (bean instanceof embeddedvalueresolveraware)
if (bean instanceof resourceloaderaware)
} if (bean instanceof messagesourceaware)
} }
}
beanfactory.setbeanclassloader(getclassloader());beanfactory.addpropertyeditorregistrar(new resourceeditorregistrar(this));
beanfactory.ignoredependencyinte***ce(resourceloaderaware.class);
beanfactory.ignoredependencyinte***ce(messagesourceaware.class);
Spring高階話題 Aware
一 aware是什麼?spring aware就是一些定義了spring容器本身功能資源的介面 spring提供的aware介面 介面備註 beannameaware 獲得到容器中bean的名稱 beanfactoryaware 獲得當前 bean factory,這樣可以呼叫容器的服務 messa...
Spring中的Aware介面
spring中提供了一些以aware結尾的介面,實現了aware介面的bean在被初始化後,可以獲取相應資源。通過aware介面,可以對spring相應資源進行操作 一定要慎重,因為可能修改spring核心類 aware有以下介面 介面作用 beannameaware 在bean中得到它在ioc容器...
Spring中Aware系列介面
一 ioc容器管理bean,bean在ioc容器中。那麼bean知不知道自己在ioc容器中的代號 id 呢?bean知不知道自己在哪個ioc容器中?能否通過bean獲取它的ioc容器物件呢?簡單來說就是 bean是否對spring有知覺 答 單純的bean 未實現aware系列介面 是沒有知覺的 實...