2016-04-22 21 views
0

Spring MVCで依存関係注入を使用しようとしているときにこのエラーが発生します。タイプ[com.sachin.dao.StockDao]の一致するBeanが依存関係のために見つかりません

[com.sachin.dao.StockDao]の一致するBeanが依存関係で見つかりません:この依存関係のautowire候補となる少なくとも1つのbeanが必要です。依存関係の注釈:{};ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです:[com.sachin.dao.StockDao]の一致するBeanが依存関係に見つかりませんでした:この依存関係のautowire候補となる少なくとも1つのbeanが必要です。依存関係注釈:{}

私は注釈を間違えていると思います。私は基本的に私のHomControllerにStockDaoImplを注入しようとしています。

これは私が設定ファイルBeanConfigurationを作成し、Bean

@Configuration 
public class BeanConfiguration { 
@Bean 
public StockDao stockDao(){ 
    return new StockDaoImpl(); 
} 
} 

を作成することを使用している

@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; 
} 

私のコントローラファイルHomeController.javaである私は私のデータretreivalを実装する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

私は 'StockDaoImpl'クラスにRepository' @'追加してみてください、とだけ思い 'Autowired'それ@に'HomeController'(コンストラクタを完全に削除します)。 – user2478398

+0

こんにちは@ user2478398答えていただきありがとうございます。これは初期化されていないエラーを与えることがあります。 –

+0

これは 'final'と宣言されているからです。この修飾子を削除すると、続行できます。もしそれが 'final'である必要があれば、' @ Autowired'コンストラクタがあります。 '@ Autowired'コンストラクタが表示されるたびに、そのクラスのインスタンスが複数存在することが想定されます(これは@コントローラのIMOにはあまり意味がありません)。 – user2478398

答えて

0

設定クラスを指す必要があります。別のJavaの設定クラスから(例えば、あなたのBeanConfigurationクラスで)、追加することを実行します。

@ComponentScan(basePackages="com.sachin") 
関連する問題