【问题标题】:Dependency injection in Spring MVC?Spring MVC中的依赖注入?
【发布时间】:2016-04-21 23:30:11
【问题描述】:

我正在尝试在我的 Spring MVC Web 应用程序中使用依赖注入。我的控制器中有这样的功能

@RequestMapping(value = "/stockgoogle/", method = RequestMethod.GET)
public @ResponseBody Stock stockGoogle(Locale locale, Model model) {    
    StockDaoImpl si = new StockDaoImpl();
    //al=s.listCurrent(id);
    Stock s=si.listGoogle();
    System.out.println("reached here");
    model.addAttribute("s", s );        
    return s;
}

我想依赖注入 StockDaoImpl。你能告诉我我该怎么做吗?我一直在尝试阅读,但大多数解释都非常复杂。我应该使用 @Autowired 吗?我应该把它放在哪里?你能帮忙吗?

【问题讨论】:

  • 如果大多数解释都非常复杂,那么这里也不会好到哪里去。阅读 Spring 文档。这是 Spring 最基本也是最重要的概念。

标签: spring spring-mvc dependency-injection


【解决方案1】:

可以通过Controller的构造函数注入

class YourController{

  private final StockDao dao;

  @Autowired 
  public YourController(StockDao dao){
    this.dao = dao;
  }
} 

现在StockDaoImpl 当然必须定义为Bean

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

另一种方法是将StockDaoImpl 定义为Component

【讨论】:

  • 嗨,Sleiman,感谢您的回答。我会做的。我还需要改变什么吗?在这个控制器方法中?
  • 不,但是开始使用this.dao而不是直接实例化它
  • 很抱歉,只是为了澄清一下。我应该把 StockDao() 方法放在哪里? StockDao 是我的接口,StockDaoImpl 类是实现。
  • 没有为依赖找到类型为 [com.sachin.dao.StockDao] 的匹配 bean:预计至少有 1 个 bean 有资格作为此依赖的自动装配候选者。依赖注解:{};嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [com.sachin.dao.StockDao] 的匹配 bean:预计至少有 1 个 bean 符合此依赖项的自动装配候选条件。
  • @sachinsrivastava 你可以把它放在你的配置类中
【解决方案2】:

在 Spring 配置文件中添加下面的配置(例如 root-context.xml)

然后在你的控制器中,你喜欢下面的代码

类测试控制器{

@Autowired 私有 StockDao stockDao;

}

【讨论】:

    【解决方案3】:

    使用 spring-4 你可以直接以给定的方式注入 :

    @Autowired
    private StockDao stockDao;
    
    public @ResponseBody Stock stockGoogle(Locale locale, Model model) {    
    
        //al=s.listCurrent(id);
        Stock s = stockDao.listGoogle();
        System.out.println("reached here");
        model.addAttribute("s", s );        
        return s;
    
    }
    

    这里

    • StockDao 将包含方法签名
    • StockDaoImpl 实现 StockDao 和方法定义
    • Autowired 将注入该 Dao,您可以使用它的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多