У меня есть интерфейс BaseDao и другие специфичные для сущности интерфейсы Dao, которые расширяют BaseDao.
public interface BaseDao<T extends RandomClass> {
// some methods
}
public interface FooDao extends BaseDao<RandomClassImpl1> {
// some methods
}
@Lazy
@Component(“fooDao”)
public class FooDaoImpl implements FooDao {
}
public interface BarDaoextends BaseDao<RandomClassImpl2> {
// some methods
}
@Lazy
@Component(“barDao”)
public class BarDaoImpl implements BarDao {
}
Я также создал конфигурацию, в которой я создал бин, который возвращает карту, в которой имя компонента dao является ключом, а компонентом dao является значение.
@Lazy
@Configuration
@Import({BarDaoImpl.class, FooDaoImpl.class })
public class DaoRepositoryConfig {
@Bean(DAO_REPOSITORY)
Map<String, BaseDao> DaoRepository(
@Lazy @Qualifier(“fooDao”)
BaseDao<RandomClassImpl1> foo,
@Lazy @Qualifier(“barDao”)
BaseDao<RandomClassImpl2> bar
) {
Map<String, BaseDao> daoRepository = new HashMap<>();
daoRepository.put(“fooDao”, foo);
daoRepository.put(“barDao”, bar);
return daoRepository;
}
}
Когда я загружаю этот компонентЯ получаю карту имен Dao и динамического прокси соответствующей реализации, которую я импортировал в конфигурации.
Но когда я пытаюсь набрать приведение прокси к непосредственному родительскому интерфейсу, он завершается неудачей с ClassCastException.
(FooDao).брошен.