2016-04-22 60 views
0

當我嘗試在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(); 
} 

我失去了一些東西。是否還有更多註釋需要註明。或在其他地方。我不確定我是否正確創建配置類。你能幫忙嗎?

+0

我會嘗試加入'@ Repository'到'StockDaoImpl'類,只是'@ Autowired'它'HomeController'(並完全移除構造函數)。 – user2478398

+0

Hi @ user2478398感謝您的回答。它可能沒有被初始化錯誤。 –

+0

這是因爲它被宣佈爲'final'。刪除此修飾符應使您可以繼續。如果你需要它是'final',那麼你擁有的'@ Autowired'構造函數就是要走的路;只要我看到一個'@ Autowired'構造函數,我就會假定這個類有多個實例(這對於@ @ Controller' IMO來說沒有多大意義)。 – user2478398

回答

0

您需要指向您的配置類(es)。要做到這一點從另一個Java配置類(例如,在你的BeanConfiguration類),地址:

@ComponentScan(basePackages="com.sachin") 
相關問題