spring 泛型注入问题
public interface BaseDao<T, PK extends Serializable> {} //baseDao接口
public class BaseDaoImpl<T, PK extends Serializable> implements BaseDao<T, PK>{} //baseDao接口的实现
public class BaseServiceImpl<T,PK extends Serializable> implements BaseService<T,PK> { //baseService接口的实现
public BaseDao<T,PK> baseDao;
public BaseDao<T, PK> getBaseDao() {
return baseDao;
}
@Resource(name="baseDaoImpl")
//泛型注入出现问题<T,PK>不能注入到baseDaoImpl中 public void setBaseDao(BaseDao<T, PK> baseDao) {
this.baseDao = baseDao;
}
}
请问有什么方法可以将<T, PK> 所指的类型注入到baseDaoImpl类中????
------解决方案--------------------这个做法本身就是错误的
泛型只在编译期间存在,所以你觉得运行时,怎么去注入一个泛型
然后,注解功能不能被继承
也就是说,就算你这个写法可以被注入,你的实际业务类也是无法根据业务的泛型自动转型的
给你个建立,以约定大于配置的思路
public class BaseServiceImpl<T,PK extends Serializable> implements BaseService<T,PK> {
public BaseDao getBaseDao() {
try{
Field f = getClass().getDeclaredField("baseDao");
f.setAccessible(true);
return (BaseDao) f.get(this);
}catch(Exception e) {
System.out.println("未找到约定DAO类");
return null;
}
}
}
然后,你每个实现的DAO里,提供一个名叫baseDao的dao,不需要其他方法就可以了
public MySerivceImpl extends BaseServiceImpl<类型,类型> implements MyService<类型,类型> {
@Autowired
private MyDaoImpl baseDao;
}
------解决方案--------------------