簡體   English   中英

找不到匹配的依賴類型 bean:Spring MVC

[英]No matching bean of type found for dependency: Spring MVC

嘗試在 Spring MVC 項目中使用 @autowire、@configuration、@bean、@Repository 時出現此錯誤

無法自動裝配字段:private com.sachin.dao.StockDaoImpl com.sachin.myapp.HomeController.stockDao;

嵌套異常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.sachin.dao.StockDaoImpl] 為依賴找到:

請讓我知道我犯了什么錯誤。 我是 Spring MVC 和依賴注入的新手。

這是我的控制器代碼。 我正在嘗試在控制器中注入 StockDaoImpl。

@Controller
public class HomeController {

     @Autowired
    private StockDaoImpl stockDao;

    @RequestMapping(value = "/stockgoogle/", method = RequestMethod.GET)
    public @ResponseBody Stock stockGoogle(Locale locale, Model model) {    
        //StockDaoImpl stockDao = new StockDaoImpl();
        Stock s=stockDao.listGoogle();
        model.addAttribute("s", s );        
        return s;
    }

}

我的服務實現如下。 我在這里使用了@Repository 注釋和“stockDao”,這是我要注入的控制器中的變量名

@Repository("stockDao")
public class StockDaoImpl implements StockDao { 
    @Override
    public Stock listGoogle() {
        Stock s = null;
        try {
            ... //some code
            String  name = rs.getString("Name");
            s = new Stock(name);
            ...
         } catch (Exception e) {
         }
         return s;
    }
}

我還單獨創建了一個配置類。 我正在使用它來定義我的 bean。 我只使用它來指定 bean,並沒有在代碼中的任何地方導入它。

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

我在這里錯過了什么。 從查看錯誤看來,@Bean 注釋對工廠不可見。 除了注釋@configuration 類之外,我還需要做任何其他事情嗎?

我也可能以錯誤的方式使用注釋。 我可能在使用 @Autowired 或 @Repository 時犯了一個錯誤。

你能幫忙嗎。

我想這可能是你的問題:

“我還單獨創建了一個配置類。我用它來定義我的 bean。我只是用它來指定 bean,並沒有在代碼中的任何地方導入它。”

您需要在某處告訴 Spring 查找BeanConfiguration 您可以在applicationContext.xml文件中執行此操作(假設您有一個),如下所示:

<context:component-scan base-package="com.sachin.config" />

這假設 BeanConfiguration 在com.sachin.config包中。

如果您找不到放置它的位置,共享您的 web.xml 文件可能會有所幫助。

我在測試類中有所描述的行為。

我在 IntelliJ 2020.1 工作,舊項目建立在:

Java 1.6
Spring 3.0.5.RELEASE
Maven POM 4.0.0
Maven 3.2.5

測試類開始為:

@Test
@ContextConfiguration(locations={ "classpath*:beans_sets/UhradyForIns.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)
@DirtiesContext(classMode= DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class OdeslatJakobyAutomatickyUhraduTest extends TestBaseWithProperties {
    private static final Logger log = LoggerFactory.getLogger(OdeslatJakobyAutomatickyUhraduTest.class);
    @Autowired
    U01UhradaBaseJpaDaoForTesting dao;

有時突然間,在 POM 發生一些變化之后,Spring 無法自動裝配 dao 來准確地提供您的消息。 dao 由它的類和 XML 上下文描述很好地描述,但突然對 Spring 不可見。 我已經嘗試了很多描述的方法,添加注釋,更改配置,但我發現,這一切都是多余的。 我所需要的只是隨后按 4 個不同的命令刷新 Maven 存儲庫 4 次:

1. mvn -e -U clean install         //In cmd line
2. Ctrl+Shift+A Reimport maven     //in IntelliJ
3. double round arrows for refresh //in the maven window of IntelliJ
4. AGAIN REPEAT THE FIRST REFRESH. 

在那之后,一切正常並且可以正常工作,直到 POM 的下一個更大的變化。

或者... 直到由於某些內在原因,Maven 或 IntelliJ 在沒有您參與的情況下損壞了本地 jar 存儲庫。 至少,我有一個案例,當我沒有觸及存儲庫時,但再次出現Could not autowire...消息。 但這一次只有一個

mvn -e -U clean install 

就夠了。

顯然,IntelliJ 中的 maven 和/或 maven 插件存在一些錯誤。 該問題由Could not autowire...消息顯示。 可以通過簡單的 Maven 存儲庫刷新進行修復,或者在更糟糕的情況下,需要一系列不同的存儲庫刷新。

我知道那個解決方案沒有明顯的邏輯,我們開發人員的工作越來越像魔術。 而這一次,絕對不是你或我的惡習。 只是我們必須適應現有的錯誤。 至少我們知道怎么做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM