我有一个 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 cannot be cast to org.springframework.batch.item.database.JdbcCursorItemReader