У меня есть приложение Spring (Spring Batch not web application). В тестовом классе я хочу получить доступ ко всем моим бобам определенного типа.
Я понимаю, что весной вы, как правило, используете IOC и позволяете контейнеру вводить ваши бобы. Однако в этом случае, я хочу Переберите переменным числом бобов, которые расширяют данный класс (org.springframework.batch.item.database.JdbcCursorItemReader), и сделать что-то (это нужно, чтобы быть блок/интеграционный тест, который просто подключается он в базу данных и читает 1 строку, поэтому во время тестирования мы можем подтвердить, что все JdbcCursorItemReader в системе имеют действительные SQL и строковые преобразователи).Получить доступ ко всем весенним бобам определенного типа
Проблема 1) Я могу только получить бобы один за один раз. Я могу получить свой класс для реализации BeanFactoryAware, чтобы получить ссылку на мою beanfactory. Тогда я могу сделать beanFactory.getBean ("name");, чтобы получить доступ к одному компоненту. Как мне получить ВСЕ Бобы? Я могу зациклиться и отбросить те, которые не являются классом, который я хочу ... но почему-то мне нужен список всех бобин, о которых знает beanfactory или что-то в этом роде.
Проблема 2) Фасоль я вернусь из BeanFactory является прокси. Если я пытаюсь бросить и использовать свой боб я получаю что-то вроде java.lang.ClassCastException: $ Proxy0 не может быть приведен к org.springframework.batch.item.database.JdbcCursorItemReader
Могу ли я наложить его на ItemReader и просто использовать его? И волшебство прокси даст мне настоящего читателя? Hummmm spring иногда бывает сложным – bwawok
@bwawok: Да, отличное от «ItemReader» должно работать нормально. Просто не пытайтесь использовать класс JDbcCursorItemReader. – skaffman
@skaffman: но что делать, если я должен сделать что-то подобное ((JdbcCursorItemReader) itemReader) .open (executeContext); –