2010-10-09 11 views
7

Bir yay uygulamanız var (Spring Batch not web application). Bir test sınıfında, belirli bir türdeki tüm fasulyelere erişim almak istiyorum.

İlkbaharda, genellikle IOC'yi kullanmanız ve kabın fasulyenizi enjekte etmesine izin vermeniz gerektiğini anlıyorum. Ancak bu durumda, belirli bir sınıfı (org.springframework.batch.item.database.JdbcCursorItemReader) genişleten ve bir şeyler yapan (yalnızca bağlanmayı sağlayan bir birim/entegrasyon testi olmasını istiyorsanız) değişken sayıda fasulye arasında geçiş yapmak istiyorum. Bu veritabanına ve 1 satır okur, bu yüzden sistemde tüm JdbcCursorItemReader geçerli SQL ve satır mappers var test zamanında teyit edebilirsiniz).Belirli bir türdeki tüm yay çekirdeklerine erişime izin ver

Sorun 1) Her seferinde sadece bir tane alabilirim. Benim fasulyem referans almak için benim sınıf BeanFactoryAware uygulamak olabilir. Sonra beanFactory.getBean ("isim") yapabilirim; Tek bir fasülyeye erişmek için. TÜM fasulyeleri nasıl alırım? İstediğim sınıf olmayanları içine sokup bırakabilirim .. ama bir şekilde böreğin ya da bir şeyin bildiği bütün fasülyelerin bir listesini istiyorum.

Sorun 2) Fasulyeden geri aldığım fasulye bir vekildir. Yayınlayabileceğim ve benim fasulye kullanmaya çalışırsanız ben java.lang.ClassCastException gibi bir şey olsun: $ Proxy0 org.springframework.batch.item.database.JdbcCursorItemReader

cevap

11

için döküm edilemez İlk soruna alabilirsiniz BeanFactoryAware yerine ApplicationContextAware kullanarak. Bu, belirli bir türdeki tüm çekirdekleri almanızı sağlayan getBeansOfType() yöntemine sahip ApplicationContext yönteminden geçer.

İkinci sorun muhtemelen bir şey JdbcCursorItemReader fasulyenizin etrafında AOP proxy'leri oluşturduğundan kaynaklanıyor. Bu oluşturulan proxy'ler, varsayılan olarak, JdbcCursorItemReader'un (özellikle, ItemReader ve ItemStream) yaptığı aynı arabirimleri uygulayacaktır. Kodunuz (JdbcCursorItemReader) sınıf türünü denememeli ve bunun yerine bu arabirim türlerinden birine yazmamalıdır. Proxy'yi doğrudan proxy sınıfını genişletmek için zorlamak mümkündür, ancak kurulumunuz hakkında hiçbir şey bilmeden, bu konuda size yardımcı olamam.

+0

Bunu ItemReader'a atayabilir ve kullanabilir miyim? Ve vekil sihir bana gerçek okuyucuyu verecek mi? Hummmm bahar bazen karmaşıktır – bwawok

+1

@bwawok: Evet, ItemReader'a yayınlamak iyi çalışıyor. Sadece 'JdbcCursorItemReader' için çalışmayın ve kullanmayın. – skaffman

+0

@skaffman: Peki ya buna benzer bir şey yapmam gerekiyorsa ((JdbcCursorItemReader) itemReader) .open (executionContext); –

İlgili konular