簡體   English   中英

訪問給定類型的所有spring bean

[英]Get access to all spring beans of a given type

我有一個Spring應用程序(Spring Batch不是Web應用程序)。 在測試類中,我想獲取對給定類型的所有bean的訪問權限。

我知道在Spring中你通常應該使用IOC並讓容器注入你的bean。 但是在這種情況下,我想循環遍歷給定類(org.springframework.batch.item.database.JdbcCursorItemReader)的可變數量的bean,並做一些事情(希望它是一個只連接的單元/集成測試它到數據庫並讀取1行,因此我們可以在測試時確認系統中的所有JdbcCursorItemReader都有有效的SQL和行映射器)。

問題1)我一次只能獲得一個豆子。 我可以讓我的類實現BeanFactoryAware來獲取對beanfactory的引用。 然后我可以做beanFactory.getBean(“name”); 訪問單個bean。 我該如何獲得所有豆類? 我可以遍歷並刪除不屬於我想要的類的那些..但不知何故,我需要beanfactory知道的所有bean的列表或者其他東西。

問題2)我從beanfactory返回的bean是一個代理。 如果我嘗試強制轉換並使用我的bean,我會得到類似java.lang.ClassCastException:$ Proxy0無法轉換為org.springframework.batch.item.database.JdbcCursorItemReader

您可以使用ApplicationContextAware而不是BeanFactoryAware解決第一個問題。 這將傳遞ApplicationContext ,它具有getBeansOfType()方法,該方法允許您檢索給定類型的所有bean。

第二個問題可能是因為某些事情正在您的JdbcCursorItemReader bean周圍創建AOP代理。 默認情況下,這些生成的代理將實現JdbcCursorItemReader執行的相同接口(特別是ItemReaderItemStream )。 您的代碼不應該嘗試轉換為類類型( JdbcCursorItemReader ),而是轉換為其中一種接口類型。 通常可以強制代理直接擴展代理類,但不知道您的設置,我無法幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM