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();
}
私は何かが足りません。それ以上注釈を付ける必要はありますか?または他の場所で。私は設定クラスを正しく作成しているかどうかはわかりません。あなたは助けてもらえますか?
私は 'StockDaoImpl'クラスにRepository' @'追加してみてください、とだけ思い 'Autowired'それ@に'HomeController'(コンストラクタを完全に削除します)。 – user2478398
こんにちは@ user2478398答えていただきありがとうございます。これは初期化されていないエラーを与えることがあります。 –
これは 'final'と宣言されているからです。この修飾子を削除すると、続行できます。もしそれが 'final'である必要があれば、' @ Autowired'コンストラクタがあります。 '@ Autowired'コンストラクタが表示されるたびに、そのクラスのインスタンスが複数存在することが想定されます(これは@コントローラのIMOにはあまり意味がありません)。 – user2478398