當我嘗試在Spring MVC中使用依賴注入時出現此錯誤。找不到匹配依賴關係的[com.sachin.dao.StockDao]類型的bean
找不到符合依賴關係的[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來實現我的數據retreival。
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
Hi @ user2478398感謝您的回答。它可能沒有被初始化錯誤。 –
這是因爲它被宣佈爲'final'。刪除此修飾符應使您可以繼續。如果你需要它是'final',那麼你擁有的'@ Autowired'構造函數就是要走的路;只要我看到一個'@ Autowired'構造函數,我就會假定這個類有多個實例(這對於@ @ Controller' IMO來說沒有多大意義)。 – user2478398