尝试在 Spring MVC 项目中使用 @autowire、@configuration、@bean、@Repository 时遇到此错误
Could not autowire field: private com.sachin.dao.StockDaoImpl com.sachin.myapp.HomeController.stockDao;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.sachin.dao.StockDaoImpl] found for dependency:
请让我知道我犯了什么错误。我是 Spring MVC 和依赖注入(inject)的新手。
这是我的 Controller 代码。我正在尝试将 StockDaoImpl 注入(inject) Controller 中。
@Controller
public class HomeController {
@Autowired
private StockDaoImpl stockDao;
@RequestMapping(value = "/stockgoogle/", method = RequestMethod.GET)
public @ResponseBody Stock stockGoogle(Locale locale, Model model) {
//StockDaoImpl stockDao = new StockDaoImpl();
Stock s=stockDao.listGoogle();
model.addAttribute("s", s );
return s;
}
}
我的服务实现如下。我在这里使用了 @Repository 注释和“stockDao”,这是我想要注入(inject)的 Controller 中的变量名
@Repository("stockDao")
public class StockDaoImpl implements StockDao {
@Override
public Stock listGoogle() {
Stock s = null;
try {
... //some code
String name = rs.getString("Name");
s = new Stock(name);
...
} catch (Exception e) {
}
return s;
}
}
我还单独创建了一个配置类。我用它来定义我的 bean。我仅使用它来指定 bean,并没有将其导入到代码中的任何位置。
@Configuration
public class BeanConfiguration {
@Bean
public StockDaoImpl stockDao(){
return new StockDaoImpl();
}
}
我在这里错过了什么吗?从错误来看,@Bean 注释对工厂来说似乎不可见。除了注释 @configuration 类之外,我还需要做其他事情吗?
我也可能以错误的方式使用注释。我可能在使用 @Autowired 或 @Repository 时犯了错误。
你能帮忙吗?
最佳答案
我认为这可能是您的问题:
“我还单独创建了一个配置类。我用它来定义我的 bean。我只是用它来指定 bean,并没有在代码中的任何地方导入它。”
在某个地方你需要告诉Spring寻找BeanConfiguration
。您可以在 applicationContext.xml
文件(假设您有一个)中执行此操作,如下所示:
<context:component-scan base-package="com.sachin.config" />
这假设 BeanConfiguration 位于 com.sachin.config
包中。
如果您找不到放置此文件的位置,共享您的 web.xml 文件可能会有所帮助。
关于java - 找不到依赖项 : Spring MVC 类型的匹配 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783842/