加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 访问给定类型的所有spring bean

发布时间:2020-12-15 00:51:29 所属栏目:Java 来源:网络整理
导读:我有一个 Spring应用程序( Spring Batch不是Web应用程序).在测试类中,我想获取对给定类型的所有bean的访问权限. 我知道在Spring中你通常应该使用IOC并让容器注入你的bean.但是在这种情况下,我想循环遍历给定类(org.springframework.batch.item.database.Jdbc
我有一个 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),而是转换为其中一种接口类型.通常可以强制代理直接扩展代理类,但不知道您的设置,我无法帮助您.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读