繁体   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