毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> java技术 >> 正文

型注入出现问题<T,PK>不能注入到baseDaoImpl

更新时间:2015-1-6:  来源:毕业论文

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类中???

为什么要这么设计呢?
你使用BaseDao<T, PK extends Serializable>的目的不就是想尽量减少pg自己写自己的dao吗?
为什么多此一举还要这样注入?

在serviceImpl中,直接
        private BaseDao<Forum, Long> forumDao;
private BaseDao<Topic, Long> topicDao;
private BaseDao<Post, Long> postDao;
这样的方式,即可。

这个做法本身就是错误的
泛型只在编译期间存在,所以你觉得运行时,怎么去注入一个泛型
然后,注解功能不能被继承
也就是说,就算你这个写法可以被注入,你的实际业务类也是无法根据业务的泛型自动转型的

给你个建立,以约定大于配置的思路
Java code
 
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,不需要其他方法就可以了
Java code
 
public MySerivceImpl extends BaseServiceImpl<类型,类型> implements MyService<类型,类型> {
 @Autowired
 private MyDaoImpl baseDao;

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。