Mam aplikację Spring (Spring Batch not web application). W klasie testowej chcę uzyskać dostęp do wszystkich moich fasoli danego typu.
Rozumiem, że wiosną powinieneś używać IOC i pozwolić pojemnikowi wstrzyknąć fasolę. Jednak w tym przypadku chcę przechodzić przez zmienną liczbę ziaren rozszerzających daną klasę (org.springframework.batch.item.database.JdbcCursorItemReader) i robić coś (chcę, żeby był to test jednostki/integracji, który po prostu łączy się do bazy danych i odczytuje 1 wiersz, więc możemy w czasie testu potwierdzić, że wszystkie JdbcCursorItemReader w systemie mają poprawne mapowania SQL i wierszy).Uzyskaj dostęp do wszystkich fasoli szparagowych danego typu.
Problem 1) Mogę zdobyć tylko jedną fasolę na raz. Mogę mieć moją klasę implementującą BeanFactoryAware, aby uzyskać odniesienie do mojej fasolki. Następnie mogę wykonać beanFactory.getBean ("name");, aby uzyskać dostęp do pojedynczego komponentu. Jak zamiast tego otrzymam WSZYSTKIE ziarna? Potrafię przeglądać i upuszczać te, które nie są klasą, której chcę .. ale jakoś potrzebuję listy wszystkich fasoli, o których wie, czy czegoś takiego.
Problem 2) Ziarno, które otrzymuję z fasoli, jest proxy. Gdy próbuję rzucić i używać mojego fasoli uzyskać coś podobnego java.lang.ClassCastException: $ Proxy0 nie mogą być oddane do org.springframework.batch.item.database.JdbcCursorItemReader
Czy mogę przesłać go do ItemReader i po prostu go użyć? A magia proxy zapewni mi prawdziwego czytelnika? Źródło HummMY jest czasami skomplikowane. – bwawok
@bwawok: Tak, przesyłanie do 'ItemReader' powinno działać dobrze. Po prostu nie próbuj rzutować na 'JdbcCursorItemReader'. – skaffman
@skaffman: ale co jeśli muszę zrobić coś takiego ((JdbcCursorItemReader) itemReader) .open (executionContext); –