【问题标题】:Could not autowire method无法自动装配方法
【发布时间】:2012-01-27 23:34:59
【问题描述】:

我收到了这个错误

org.springframework.beans.factory.BeanCreationException: 
Could not autowire method:

这是我spring的xml配置。

<bean ...>   
...
    <property name="InfoModel" ref="InfoModel"></property>
</bean>

这是我在 Java 类中自动装配的代码

  private InfoModel infoModel;

  @Autowired
  public void setInfoModel(InfoModel infoModel) {
    this.infoModel= infoModel;
  }

我是不是错过了什么。我怀疑我应该为 InfoModel 创建一个Interface 以使其自动装配?

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.model.InfoModel] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:547)

【问题讨论】:

  • 你能发布 InfoModel 类吗?我假设它是一个具体的类。
  • 能否请您发布一些有关您的异常堆栈跟踪的更多信息
  • InfoModel 类只初始化其中的一些值。
  • 通常所有需要的信息都包含在异常堆栈跟踪中。附: InfoModel bean 有什么例外吗?

标签: java spring spring-mvc dependency-injection autowired


【解决方案1】:

如果您使用@Autowired,则无需在 xml 中将其标记为属性。只需在 XML 中将 InfoModel 声明为 bean 并从 xml 中为您注入 InfoModel 的 bean 删除 property

总结

1您需要在您的 XML 中为 InfoModel 定义一个 bean

2您需要从 XML 中删除 property

3确保您已通过添加来驱动上下文注释

<context:annotation-config />

【讨论】:

  • 如果他使用注解,他可以将@Component 放入InfoModel 的类型级别,而不是放入XML。虽然很相似。
【解决方案2】:

我认为您应该在私有 Info.... 声明之前写 @Autowired。并从 jigar 提到的 xml 中删除条目。

【讨论】:

  • @Autowired注解放在字段或方法访问器中也是一样的。
【解决方案3】:

您是否使用 @Component@Service@Repository 等类型级别注释正确注释了您的 InfoModel 类。它们都非常相似。如果您的InfoModel 没有正确注释,您将收到这个著名的“No matching bean...”错误。尝试使用 @Component 注释您的 InfoModel 类,使其看起来像这样:

@Component
public class InfoModel {
  // code
}

【讨论】:

    【解决方案4】:

    如果堆栈跟踪显示该类型没有匹配的 bean,那么这就是问题所在。

    将 InfoModel bean 添加到 spring 应用程序上下文中,例如通过在相同的 xml 配置中声明 bean:

    <bean id="InfoModel" class="com.model.InfoModel" />
    

    顺便说一句。您不应该将 bean 标识符的第一个字母大写,遵循与变量相同的命名约定,即。小驼峰式。 自动装配和显式注入依赖也是多余的。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 2017-08-08
      • 2020-05-04
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2015-07-17
      相关资源
      最近更新 更多