【发布时间】:2016-04-22 00:37:24
【问题描述】:
当我尝试在 Spring MVC 中使用依赖注入时出现此错误。
没有为依赖找到类型为 [com.sachin.dao.StockDao] 的匹配 bean:预计至少有 1 个 bean 符合此依赖的自动装配候选条件。依赖注解:{};嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [com.sachin.dao.StockDao] 的匹配 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释:{}
我认为我在注释中犯了一些错误。我基本上是想在我的 HomController 中注入 StockDaoImpl。
这是我的控制器文件 HomeController.java
@Controller
public class HomeController {
private final StockDao dao;
@Autowired
public HomeController(StockDao dao){
this.dao = dao;
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "home";
}
@RequestMapping(value = "/stockgoogle/", method = RequestMethod.GET)
public @ResponseBody Stock stockGoogle(Locale locale, Model model) {
//StockDaoImpl si = new StockDaoImpl();
Stock s=dao.listGoogle();
System.out.println("reached here");
model.addAttribute("s", s );
return s;
}
我创建了一个配置文件 BeanConfiguration 并使用它来创建 bean
@Configuration
public class BeanConfiguration {
@Bean
public StockDao stockDao(){
return new StockDaoImpl();
}
}
我有 StockDaoImpl 来实现我的数据检索。
public class StockDaoImpl implements StockDao {
@Override
public Stock listGoogle() {
Connection con = null;
Stock s = null;
try {
Class.forName("org.postgresql.Driver");
con = DriverManager
.getConnection("jdbc:postgresql://localhost:5432/webapp",
"postgres", "sachin");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT * FROM \"public\".\"Historical\" " );
rs.next();
String name = rs.getString("Name");
s = new Stock(name);
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
}
上面是实现如下接口:
public interface StockDao {
public Stock listGoogle();
}
我是不是错过了什么。还有没有我必须添加的注释。或者在别的地方。我不确定我是否正确创建了配置类。你能帮忙吗?
【问题讨论】:
-
我会尝试将
@Repository添加到StockDaoImpl类中,然后将@Autowired添加到HomeController中(并完全删除构造函数)。 -
嗨@user2478398 谢谢你的回答。它给出的可能是未初始化错误。
-
那是因为它被声明为
final。删除此修饰符应该使您能够继续。如果您需要它是final,那么您拥有的@Autowired构造函数就是要走的路;每当我看到@Autowired构造函数时,我都会假设该类会有多个实例(这对于@ControllerIMO 来说没有多大意义)。 -
@user2478398 好的。我试过了,还是一样的错误。我认为它无法看到 bean 定义或其他东西。
标签: spring spring-mvc dependency-injection