当我尝试在Spring MVC中使用依赖注入时,我收到此错误。
找不到类型为[com.sachin.dao.StockDao]的匹配bean依赖:期望至少有一个bean可以作为此依赖项的autowire候选者。依赖注释:{};嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[com.sachin.dao.StockDao]的匹配bean依赖:预期至少有1个bean可以作为此依赖项的autowire候选者。依赖注释:{}
我想我在注释中犯了一些错误。我基本上是想在我的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();
}
我错过了什么。还有我需要注释的注释吗?或者在其他地方。我不确定我是否正确创建配置类。你能帮忙吗?
答案 0 :(得分:0)
您需要指向您的配置类。要从另一个Java配置类(例如,在BeanConfiguration类中)执行此操作,请添加:
@ComponentScan(basePackages="com.sachin")