bean的自动问题

时间:2011-07-19 13:36:10

标签: java spring annotations dwr

春季2.5,

我有一个类StockDwr

StockDwr它是一个具有原型范围的豆名称库存

在这个类中,我有一个带有@Autowired批注的属性ModRepository

ModRepository仅由此类

使用

在这个课程中我只有那个(因为我试图找到问题)

public void read(String fileName) {
    System.out.println(fileName);
}

当我去使用股票的jsp时我得到了

创建名为“stock”的bean时出错:字段自动装配失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private com.domain.ModRepository com.web.StockDwr.modRepository;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义[com.domain.ModRepository]类型的唯一bean:类型[com.domain.ModRepository]的不满意依赖:期望至少有一个匹配的bean

我没有在xml文件中定义ModRepository,我试图这样做,但它得到了同样的问题

任何想法?

4 个答案:

答案 0 :(得分:2)

您收到错误是因为Spring不了解您的ModRepository对象。为了自动装配东西,spring必须知道那是什么东西。你说你试图在你的应用程序上下文xml中定义ModRepository,但仍然得到相同的错误。在这种情况下,您必须错误地定义它,因为这正是您必须要做的。

答案 1 :(得分:2)

可能你在xml文件中为ModRepository做了错误的bean定义。 spring无法找到bean com.domain.ModRepository

自动装配按类型进行。你的ModRepository实现了一些接口吗?在这种情况下,如果有很多实现,spring将无法唯一地标识bean。

避免使用@Qualifier注释。限定符确保自动装配按名称发生。

或者,您可以尝试使用注释,将@Component置于ModRepository类之上 并确保在applicationContext.xml

中有这两行
  <context:annotation-config />
  <context:component-scan base-package="com.domain" />

答案 2 :(得分:1)

我假设您已配置

   <context:component-scan base-package="..."/>. 

如果没有@Component注释,Spring无法知道哪个类是它应该跟踪的组件。

答案 3 :(得分:-1)

@Autowired using annotations

@Repository(“ExampleDao”)公共类ExampleDaoImpl实现了ExampleDao

@Service(“ServiceExample”)公共类ExampleServiceImpl实现ExampleService

@Controller public class ExampleController

@Autowired private ExmpleService ServiceExample;