读书人

spring 泛型注入有关问题

发布时间: 2013-08-04 18:26:15 作者: rapoo

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("未找到约—AO类");
return null;
}
}
}


然后,你每个实现的DAO里,提供一个名叫baseDao的dao,不需要其他方法就可以了

public MySerivceImpl extends BaseServiceImpl<类型,类型> implements MyService<类型,类型> {
@Autowired
private MyDaoImpl baseDao;

}

[解决办法]
引用:
引用:
如果你的本意是希望歌公用DAO,避免pg自己更多DAO,只pgservice即可。
完全可以成似:


Java code



public class GenericHibernateDao<T, PK extends Serializable> extends HibernateDaoSupport implements GenericD……



是的。所以,在具service中,通

private GenericHibernateDao<Forum, Long> forumDao;
private GenericHibernateDao<Topic, Long> topicDao;
private GenericHibernateDao<Post, Long> postDao;
即可。

[解决办法]
http://stackoverflow.com/questions/502994/spring-ioc-and-generic-interface-type
连接里的问题和你描述的一样,你何以参考一下

读书人网 >Java Web开发

热点推荐