@Inject注解和@Named注解注入失敗
更新時間:2026年05月21日 16:51:31 作者:成為大佬先禿頭
在學習Spring框架時,按照官網介紹的JSR-333標準注釋(依賴注入)操作,但運行時找不到bean并報錯,后發(fā)現是pom文件中版本不對,將版本降低后,問題解決,總結了個人經驗,原來是不同版本的包名不同導致問題發(fā)生
問題發(fā)現
在學習spring框架的時候,官方介紹Spring支持JSR-330標準注釋(依賴注入)。然后按照官網的方式去操作。
pom文件:
<dependency>
<groupId>jakarta.inject</groupId>
<artifactId>jakarta.inject-api</artifactId>
<version>2.0.1</version>
</dependency>示例代碼如下:
@Named
public class B{}
@Named
public class A{
@Inject
private B b;
public B getB() { return b; }
@Inject
public void setB(B b) { this.b = b; }
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext("com.example");
A bean = applicationContext.getBean(A.class);
System.out.println(bean.b);
/** Output:
* No qualifying bean of type 'com.example.A' available
*/
}
}
運行直接找不到bean,報錯。
問題解決
后面發(fā)現官網介紹的版本好像不一樣,難道是這個原因(不是吧!?。缓蟀裵om文件版本換低點。
<dependency>
<groupId>jakarta.inject</groupId>
<artifactId>jakarta.inject-api</artifactId>
<version>1.0</version>
</dependency>
項目都報紅了,發(fā)現原先的包名報錯了,于是重新引入才發(fā)現問題。
- 2.0.1版本的包名對應jakarta.inject.Named;
- 1.0版本的包名對應javax.inject.Inject;
至此問題解決,運行一下:
@Named
public class B{}
@Named
public class A{
@Inject
private B b;
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext("com.example");
A bean = applicationContext.getBean(A.class);
System.out.println(bean.b);
/** Output:
* com.example.B@9225652
*/
}
}
問題解決。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringMVC + jquery.uploadify實現上傳文件功能
文件上傳是很多項目都會使用到的功能,SpringMVC當然也提供了這個功能。不過小編不建議在項目中通過form表單來提交文件上傳,這樣做的局限性很大。下面這篇文章主要介紹了利用SpringMVC + jquery.uploadify實現上傳文件功能的相關資料,需要的朋友可以參考下。2017-06-06
Java NumberFormat格式化float類型的bug
今天小編就為大家分享一篇關于Java NumberFormat格式化float類型的bug,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10

