java - 尝试将动态弹簧代理类型强制转换为接口时出现 ClassCast 异常
问题描述
我有一个接口 BaseDao 和其他扩展 BaseDao 的实体特定的 Dao 接口。
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 {
}
我还创建了一个配置,在其中创建了一个 bean,它返回一个 Map,其中 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;
}
}
当我加载这个 bean 时,我会得到一张我在配置中导入的 Dao 名称和相应实现的动态代理的映射。
但是,当我尝试将代理类型强制转换为直接父接口时,它会因 ClassCastException 而失败。
(FooDao) daoRepo.get(“fooDao”) [ 这里 daoRepo.get(“fooDao”) 返回 FooDaoImpl 的代理,我可以在调试器中看到它,但是当我尝试将其强制转换为 FooDao 时,抛出 ClassCast 异常。
解决方案
推荐阅读
- reactjs - 在本机反应中动态呈现问题
- java - 可变 Spring Bean 中的线程安全
- python - 从 Visual Studio Code 中的覆盖范围调用的 Python 单元测试中的触发断点
- reactjs - 获取 TypeError:无法获取
- reactjs - 为什么 React 组件渲染只完成一次,而 reduce-action 会多次更改状态?
- python - Python中的返回问题
- c# - C#:如何操作列表中项目的值
- javascript - 构造函数是否总是可以立即访问其类中声明的函数?
- java - Java 抑制所有控制台输出
- mysql - 如何解决无法连接到任何指定的MySQL?