[英]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
執行的相同接口(特別是ItemReader
和ItemStream
)。 您的代碼不應該嘗試轉換為類類型( JdbcCursorItemReader
),而是轉換為其中一種接口類型。 通常可以強制代理直接擴展代理類,但不知道您的設置,我無法幫助您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.