2011-05-20 109 views
9

我需要幫助瞭解春季的自定義範圍我參考了參考手冊並對其有所瞭解,但對我的疑惑是實際上調用了我的get方法作用域接口的實現儘管我的理解是,如果定義了scope = myscope的bean,Spring會在我的作用域實現上調用get方法來檢索對象。但是當我遇到一個例子時,我發現了一些奇怪的東西。瞭解春季的自定義範圍

的調用get方法不是在下面的語句

Object targetBean = getApplicationContext().getBean(task.getBeanName()); 

但下面的語句的執行的執行製作。

ReflectionUtils.invokeMethod(targetMethod, targetBean, arguments); 

任何人都可以通過解釋更多關於自定義範圍實現和調用get方法來幫助我。

PS:在關注例如自定義範圍使用ThreadLocal的。如果任何一個能提供我customscope的工作示例鏈接與本地線程,這將是一個很大的幫助

回答

2

我已經廣泛使用過去的自定義範圍將有狀態對象注入單例服務。

我的理解是,代理包裝了自定義作用域的bean,代理從bean的方法調用的作用域中檢索bean。

Spring Indepth

所以看看你的情況

Object targetBean = getApplicationContext().getBean(task.getBeanName()); 

targetBean將代理

ReflectionUtils.invokeMethod(targetMethod, targetBean, arguments); 

上調用它通過org.springframework.beans.factory.config.Scope#get調用代理的方法來獲取正確的豆