没有找到类型为[com.sachin.dao.StockDao]的匹配bean用于依赖

时间:2016-04-22 00:37:24

标签: spring spring-mvc dependency-injection

当我尝试在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();
}

我错过了什么。还有我需要注释的注释吗?或者在其他地方。我不确定我是否正确创建配置类。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

您需要指向您的配置类。要从另一个Java配置类(例如,在BeanConfiguration类中)执行此操作,请添加:

@ComponentScan(basePackages="com.sachin")