[英]Spring No matching bean of type … found for dependency: expected at least 1 bean
[英]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.