我目前使用 Spring 3.0.x ..
我想知道这些结构有什么问题,
我想管理子类而不是父类。
我有 2 个子 DAO 扩展了 BaseDAO :
public abstract class BaseDAO<K, E> {
....
}
@Repository
public class UserDAO extends BaseDAO<String, User> {
....
}
@Repository
public class ApprovalDAO extends BaseDAO<String, Approval> {
....
}
我有这样的服务,层次结构如下:
public abstract class BaseService<K, E extends BaseEntity, D extends BaseDAO<K, E>> {
@Autowired
protected D dao;
....
}
public abstract class BaseCommonService<K, E extends BaseCommonEntity, D extends BaseDAO<K, E>> extends BaseService<K,E,D> {
....
}
@Service
public class UserService extends BaseCommonService<String, User, UserDAO> {
....
}
当尝试将 userservice 对象注入我的应用程序时,它会抛出如下错误:
线程“main”中的异常
org.springframework.beans.factory.BeanCreationException:
使用名称创建 bean 时出错
'testEntities':注入自动装配
依赖失败;嵌套异常
是
org.springframework.beans.factory.BeanCreationException:
无法自动装配字段:私有
com.primetech.module.common.service.UserService
com.primetech.module.purchase.app.TestEntities.userService;
嵌套异常是
org.springframework.beans.factory.BeanCreationException:
使用名称创建 bean 时出错
'userService':注入自动装配
依赖失败;嵌套异常
是
org.springframework.beans.factory.BeanCreationException:
无法自动装配字段:受保护
com.primetech.core.parent.BaseDAO
com.primetech.core.parent.BaseService.dao;
嵌套异常是
org.springframework.beans.factory.NoSuchBeanDefinitionException:
没有独特的 bean 类型
[com.primetech.core.parent.BaseDAO] 是
定义:预期的单个匹配 bean
但发现2:[userDAO,approvalDAO]
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1064)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
在
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
在
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
在
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
在
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
在
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:574)
在
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
在
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
在
org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
在
org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:93)
在
com.primetech.module.purchase.app.TestEntities.main(TestEntities.java:81)
造成原因:
org.springframework.beans.factory.BeanCreationException:
无法自动装配字段:私有
com.primetech.module.common.service.UserService
com.primetech.module.purchase.app.TestEntities.userService;
嵌套异常是
org.springframework.beans.factory.BeanCreationException:
使用名称创建 bean 时出错
'userService':注入自动装配
依赖失败;嵌套异常
是
org.springframework.beans.factory.BeanCreationException:
无法自动装配字段:受保护
com.primetech.core.parent.BaseDAO
com.primetech.core.parent.BaseService.dao;
嵌套异常是
org.springframework.beans.factory.NoSuchBeanDefinitionException:
没有独特的 bean 类型
[com.primetech.core.parent.BaseDAO] 是
定义:预期的单个匹配 bean
但发现2:[userDAO,approvalDAO]
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:507)
在
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283)
... 13 更多 造成原因:
org.springframework.beans.factory.BeanCreationException:
使用名称创建 bean 时出错
'userService':注入自动装配
依赖失败;嵌套异常
是
org.springframework.beans.factory.BeanCreationException:
无法自动装配字段:受保护
com.primetech.core.parent.BaseDAO
com.primetech.core.parent.BaseService.dao;
嵌套异常是
org.springframework.beans.factory.NoSuchBeanDefinitionException:
没有独特的 bean 类型
[com.primetech.core.parent.BaseDAO] 是
定义:预期的单个匹配 bean
但发现2:[userDAO,approvalDAO]
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1064)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
在
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
在
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
在
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
在
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
在
org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:838)
在
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:780)
在
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:697)
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 15 更多 造成原因:
org.springframework.beans.factory.BeanCreationException:
无法自动装配字段:受保护
com.primetech.core.parent.BaseDAO
com.primetech.core.parent.BaseService.dao;
嵌套异常是
org.springframework.beans.factory.NoSuchBeanDefinitionException:
没有独特的 bean 类型
[com.primetech.core.parent.BaseDAO] 是
定义:预期的单个匹配 bean
但发现2:[userDAO,approvalDAO]
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:507)
在
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:283)
... 26 更多 原因:
org.springframework.beans.factory.NoSuchBeanDefinitionException:
没有独特的 bean 类型
[com.primetech.core.parent.BaseDAO] 是
定义:预期的单个匹配 bean
但发现2:[userDAO,approvalDAO]
在
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:790)
在
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:697)
在
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 28 更多
我尝试更改此部分,删除 @Repository 注释:
@Repository
public class ApprovalDAO extends BaseDAO<String, Approval> {
....
}
进入这个:
public class ApprovalDAO extends BaseDAO<String, Approval> {
....
}
事情运行没有错误,但是随后,批准 DAO 不再由 spring 管理,并且以后不能由 @Autowired 注入
关于如何解决这个问题有什么建议吗?