spring 继承的baseDao无法注入导致异常的问题
2013-08-15 18:54
579 查看
今天在baseService<T> 中注入了baseDao<T>
public abstract class BaseService { @Resource private BaseDao baseDao ; .................................. }
然后一运行出错
Error creating bean with name 'userService':
Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'baseDao': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object
记得前几天在spring中配置 domainClassConveter的时候也是这个错误 ,当时弄了半天没弄出来 ,直接注掉了...羞愧
这次又查了下资料 ,发现是泛型的问题,
在baseDao用Resource注入后,在具体实现时(比如用ioc得到userService时),没提供具体的T类型 ,而spring注入baseDao<T> - 即baseDao<Object>会发生错误(具体原因不甚明确)
解决方案是 :
public abstract class BaseService <T> {
private BaseDao<T> baseDao ; //在这里不进行注入,而实现set方法
public void setBaseDao(BaseDao<T> baseDao) {
this.baseDao = baseDao;
}
public void saveOrUpdate (T entity) {
baseDao.save(entity) ;
}
public void delete (T entity) {
baseDao.delete(entity) ;
}
public void delete(Long id){
baseDao.delete(id) ;
}
public T findOne (Long id ) {
return baseDao.findOne(id) ;
}
public Page<T> findAll (Pageable pageable ) {
return baseDao.findAll(pageable) ;
}
public List<T> findAll () {
return baseDao.findAll() ;
}
}
//具体实现类
public class NewsService extends BaseService<News> {
@Override
@Resource("newsDao") //这里不能为baseDao
public void setBaseDao(BaseDao<News> baseDao) {
// TODO Auto-generated method stub
super.setBaseDao(baseDao);
}
}
public abstract class BaseService { @Resource private BaseDao baseDao ; .................................. }
然后一运行出错
Error creating bean with name 'userService':
Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'baseDao': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object
记得前几天在spring中配置 domainClassConveter的时候也是这个错误 ,当时弄了半天没弄出来 ,直接注掉了...羞愧
这次又查了下资料 ,发现是泛型的问题,
在baseDao用Resource注入后,在具体实现时(比如用ioc得到userService时),没提供具体的T类型 ,而spring注入baseDao<T> - 即baseDao<Object>会发生错误(具体原因不甚明确)
解决方案是 :
public abstract class BaseService <T> {
private BaseDao<T> baseDao ; //在这里不进行注入,而实现set方法
public void setBaseDao(BaseDao<T> baseDao) {
this.baseDao = baseDao;
}
public void saveOrUpdate (T entity) {
baseDao.save(entity) ;
}
public void delete (T entity) {
baseDao.delete(entity) ;
}
public void delete(Long id){
baseDao.delete(id) ;
}
public T findOne (Long id ) {
return baseDao.findOne(id) ;
}
public Page<T> findAll (Pageable pageable ) {
return baseDao.findAll(pageable) ;
}
public List<T> findAll () {
return baseDao.findAll() ;
}
}
//具体实现类
public class NewsService extends BaseService<News> {
@Override
@Resource("newsDao") //这里不能为baseDao
public void setBaseDao(BaseDao<News> baseDao) {
// TODO Auto-generated method stub
super.setBaseDao(baseDao);
}
}
相关文章推荐
- Spring boot 启动类位置导致类无法注入问题
- 解决Spring boot使用Quartz时Job中无法注入Bean 空指针异常问题
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- SpringMVC中定时器继承Task后无法对service注入问题
- 解决spring-boot 中 bean无法注入的问题
- spring mvc导致的已配置placeholder但是placeholder却无法注入的问题(使用annotation)
- Spring整合Quartz时,任务类中无法注入Bean的问题
- 因默认包扫描问题导致的SpringBoot项目无法启动问题
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- vmware异常关闭后导致虚拟机无法打开问题解决办法
- 关于tomcat服务器部署,页面报404/500错误,myeclipse异常关闭 导致tomcat 6.0 无法重启 的问题
- Linq to XML用XmlReader读取数据导致无法输出的格式化异常的问题
- 解决服务器80端口监听异常导致无法打开和访问网站的问题
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
- CXF WebService+Spring 无法注入问题解决方法