0 0

S2SH整合注入@Autowired出现expected single matching bean but found 2: [iDAO, areaDAO]10

异常信息如下:

2012-9-8 14:42:57 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class

org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'areaManager':

Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException:

Could not autowire field: protected com.cn.common.base.IDAO com.cn.common.base.ManagerImpl.iDAO; nested

exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type

[com.cn.common.base.IDAO] is defined: expected single matching bean but found 2: [iDAO, areaDAO]
 at

org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstanti

ation(AutowiredAnnotationBeanPostProcessor.java:243)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean

(AbstractAutowireCapableBeanFactory.java:959)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean

(AbstractAutowireCapableBeanFactory.java:472)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run

(AbstractAutowireCapableBeanFactory.java:409)
 at java.security.AccessController.doPrivileged(Native Method)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean

(AbstractAutowireCapableBeanFactory.java:380)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject

(AbstractBeanFactory.java:264)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton

(DefaultSingletonBeanRegistry.java:222)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean

(AbstractBeanFactory.java:261)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean

(AbstractBeanFactory.java:185)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean

(AbstractBeanFactory.java:164)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons

(DefaultListableBeanFactory.java:429)
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization

(AbstractApplicationContext.java:728)
 at org.springframework.context.support.AbstractApplicationContext.refresh

(AbstractApplicationContext.java:380)
 at org.springframework.web.context.ContextLoader.createWebApplicationContext

(ContextLoader.java:255)
 at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
 at org.springframework.web.context.ContextLoaderListener.contextInitialized

(ContextLoaderListener.java:45)
 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926)
 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889)
 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
 at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
 at org.apache.catalina.core.StandardService.start(StandardService.java:516)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected

com.cn.common.base.IDAO com.cn.common.base.ManagerImpl.iDAO; nested exception is

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type

[com.cn.common.base.IDAO] is defined: expected single matching bean but found 2: [iDAO, areaDAO]
 at

org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.in

ject(AutowiredAnnotationBeanPostProcessor.java:435)
 at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields

(InjectionMetadata.java:105)
 at

org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstanti

ation(AutowiredAnnotationBeanPostProcessor.java:240)
 ... 40 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type

[com.cn.common.base.IDAO] is defined: expected single matching bean but found 2: [iDAO, areaDAO]
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency

(DefaultListableBeanFactory.java:621)
 at

org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.in

ject(AutowiredAnnotationBeanPostProcessor.java:412)
 ... 42 more
2012-9-8 14:42:57 org.apache.catalina.core.ApplicationContext log

说明如下:有一个公共的dao层接口(IDAO)及其实现类(DAOImpl)和service层接口(IManager)及其实现类(ManagerImpl)

IDAO.java如下:

public interface IDAO {
  public void add(Object obj);

}

DAOImpl.java如下:

public class DAOImpl implements IDAO {
  @Autowired
  protected HibernateTemplate ht;

  public void add(Object obj) {
   ht.save(obj);
  }

}

IManager.java如下:

public interface IManager {
  public void add(Object obj);

}

ManagerImpl.java如下:

public class ManagerImpl implements IManager {
 @Autowired
 protected IDAO iDAO;
 
  public void add(Object obj) {
   iDAO.add(obj);
  }

}

现在有一个area类,以及dao层接口实现类,service层接口实现类,分别继承以上相应的接口或者类,AreaManagerImpl.java

代码如下:

 public class AreaManagerImpl extends ManagerImpl implements IAreaManager {
  @Autowired
  private IAreaDAO areaDAO;

  //此方法为AreaDAO接口方法

  public List<Area> getAreaListByFather(Integer father) {
   return areaDAO.getAreaListByFather(father);
  }

}

===========================主要JAVA文件结束=====================

spring配置:

<context:annotation-config />

<bean id="iDAO" class="com.cn.common.base.DAOImpl" />
<bean id="areaManager" class="com.cn.common.area.service.AreaManagerImpl" />
<bean id="areaDAO" class="com.cn.common.area.dao.AreaDAOImpl" />

启动tomcat后报以上的异常,求各位大神,小弟不胜感激,谢谢了

另外,看了网上的解决办法,在AreaManagerImpl类中加入@Qualifier("iDAO"),可是报另一个异常,链接如下:http://www.iteye.com/problems/88187

还请各位大神赐教,再次感谢


问题补充
jinnianshilongnian 写道
Could not autowire field: protected com.cn.common.base.IDAO com.cn.common.base.ManagerImpl.iDAO; nested
exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type
[com.cn.common.base.IDAO] is defined: expected single matching bean but found 2: [iDAO, areaDAO]
at

public class ManagerImpl implements IManager {
@Autowired
protected IDAO iDAO;

这个注入有问题,  iDAO实现是有两个的 iDAO, areaDAO  所有有二义性
改成

public class ManagerImpl implements IManager {
@Autowired
@Qualifier("iDAO")
protected IDAO iDAO;


问答里的
private com.cn.common.area.IAreaDAO com.cn.common.area.service.AreaManagerImpl.areaDAO; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.cn.common.area.IAreaDAO] is defined: Unsatisfied dependency of type [interface com.cn.common.area.IAreaDAO]: expected at least 1 matching bean



引用
public class AreaManagerImpl extends ManagerImpl implements IAreaManager {
  @Autowired
  @Qualifier("iDAO")
  private IAreaDAO areaDAO;

改成
Java代码 
public class AreaManagerImpl extends ManagerImpl implements IAreaManager { 
  @Autowired 
  @Qualifier("areaDAO") 
  private IAreaDAO areaDAO; 

此处注入的是areaDao

问题以解决,谢谢了

1个答案 按时间排序 按投票排序

0 0

没有找到com.cn.common.base.IDAO 这个bean的定义

2012年9月10日 10:40

相关推荐

    通过@Autowired注解注入bean的顺序,以及@bean注入.rar

    这个bean将被添加到Spring的bean定义中,并且可以在其他bean中通过`@Autowired`进行注入。`@Bean`可以包含额外的配置,如`@Lazy`(表示延迟初始化)、`@Profile`(环境特定的bean)等。 在`@Autowired`注入时的顺序...

    SSH笔记-通过@Autowired配置注入关系

    在Spring框架中,`@Autowired`注解是一个关键特性,用于自动装配Bean的依赖。它极大地简化了传统XML配置中的bean依赖注入过程。本笔记将深入探讨如何在Spring 4中利用`@Autowired`注解配置注入关系,以及它与前一篇...

    Spring In Action 使用@Autowired 和@ Resource 自动装配Bean

    在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...

    (转)Spring中@Autowired注解和@Resource注解的区别

    在Spring框架中,`@Autowired`和`@Resource`注解是两个常见的依赖注入(DI, Dependency Injection)工具,它们都是用来解决组件之间的耦合问题,使得代码更加灵活和可测试。然而,这两个注解在具体使用时有一些关键性...

    详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    Spring 依赖注入:@Autowired,@Resource 和@Inject 区别与实现原理 Spring 依赖注入是指在应用程序中将对象之间的依赖关系自动装配的过程。Spring 框架提供了多种依赖注入方式,包括 @Autowired、@Resource 和@...

    Spring@Autowired注解与自动装配.rar

    在Spring框架中,`@Autowired`注解是一个关键特性,用于实现依赖注入(Dependency Injection,简称DI)。依赖注入是设计模式中的一个重要概念,它有助于降低组件之间的耦合度,提高代码的可测试性和可维护性。`@...

    详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决

    但是在多线程处理任务中,当我们使用 @Autowired 注入 bean 时,会出现空指针异常。这是为什么呢? 原因分析: 在 SpringBoot 应用程序中,bean 的注入是通过 ApplicationContext 来实现的。在多线程处理任务中,每...

    BeanPostProcessor实现注入的@Autowired注入的对象是增强的代理对象.rar

    当我们谈论"BeanPostProcessor实现注入的@Autowired注入的对象是增强的代理对象"时,实际上是在讨论如何通过`BeanPostProcessor`来对`@Autowired`注入的bean进行代理增强。 首先,让我们了解`@Autowired`注解的工作...

    Spring使用@Autowired注解自动装配

    在Spring框架中,`@Autowired`注解是一个关键特性,用于简化依赖注入的过程。依赖注入是一种设计模式,它允许我们解耦代码,提高模块的可测试性和可维护性。在这个主题中,我们将深入探讨`@Autowired`的工作原理、...

    S2SH整合 S2SH整合

    S2SH整合指的是Struts2、Spring和Hibernate这三个开源框架的集成应用,它们分别是MVC(Model-View-Controller)架构中的控制层、业务层和数据持久层的优秀解决方案。在Java Web开发中,S2SH整合能提供一个强大、灵活...

    HibernateDaoSupport 与@Autowired

    例如,我们可以自定义一个DAO类,继承`HibernateDaoSupport`,然后利用`@Autowired`来注入Service层的bean,实现业务逻辑和数据访问的解耦: ```java @Repository public class CustomUserDao extends ...

    【Java面试】@Resource 和 @Autowired 的区别.doc

    在使用 @Autowired 注解时,如果在 Spring IOC 容器里面存在多个相同类型的 Bean 实例,那么 Spring 启动的时候,会提示一个错误,大概意思原本只能注入一个单实例 Bean,但是在 IOC 容器里面却发现有多个,导致注入...

    @Autowired 注解是如何实现的?(csdn)————程序.pdf

    在Spring框架中,`@Autowired`注解是核心的依赖注入(Dependency Injection,DI)工具,它允许开发者自动地将Bean实例注入到需要的地方,无需显式地通过setter方法或构造函数来设置。在Java配置方式下,`@Autowired`...

    Spring使用@Autowired为抽象父类注入依赖代码实例

    Spring框架中,使用@Autowired注解可以将依赖项注入到Bean中,但是当我们需要将依赖项注入到抽象父类时,会遇到一些问题。如果我们直接使用@Autowired注解在抽象父类中,可能不会生效,因为抽象父类不能被实例化。...

    1.@Resource是按名称进行注入的,属于java自带的。@Autowired是按类型进行注入的,属于Spring。.pdf

    与`@Resource`不同,`@Autowired`主要通过类型匹配来找到合适的bean进行注入。例如: ```java @Autowired private DataSource dataSource; ``` 在这个例子中,Spring会查找类型为`DataSource`的bean,并将其注入到...

    因Spring AOP导致@Autowired依赖注入失败的解决方法

    Spring AOP 导致@Autowired 依赖注入失败的解决方法 Spring AOP(Aspect-Oriented Programming,面向切面编程)是一种编程技术,它允许开发者在不修改源代码的情况下,增加新的功能。然而,在使用 Spring AOP 时,...

    Spring Ioc源码分析系列--@Autowired注解的实现原理.doc

    它会对标注了 @Autowired 的 Bean 进行预处理,然后在真正的注入阶段将依赖的 Bean 实例注入到目标 Bean 中。 在我们的例子中,我们定义了两个 Service:UserService 和 ManagerService。UserService 只有一个 ...

    Intellij IDEA如何去掉@Autowired 注入警告的方法

    Intellij IDEA如何去掉@Autowired 注入警告的方法 在本篇文章中,我们将探讨如何在Intellij IDEA中去掉@Autowired 注入警告的方法。这个问题是很多开发者在使用Spring框架和Mybatis时经常遇到的问题。 首先,让...

    解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题

    "解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题" Spring Boot项目在使用多线程处理任务时,经常会遇到无法通过@Autowired注入bean的问题。本文将介绍解决该问题的方法,并详细解释原因和...

    详解Spring @Autowired 注入小技巧

    Spring @Autowired 注入小技巧...Field stu1 in com.example.demo.controller.MyController required a single bean, but 2 were found: - wangEr: defined in file[C:\Users\huangjiawei\Desktop\demo\target\classes\...

Global site tag (gtag.js) - Google Analytics