@Inject注解和@Named注解注入失败
更新时间:2026年05月21日 16:51:31 作者:成为大佬先秃头
在学习Spring框架时,按照官网介绍的JSR-333标准注释(依赖注入)操作,但运行时找不到bean并报错,后发现是pom文件中版本不对,将版本降低后,问题解决,总结了个人经验,原来是不同版本的包名不同导致问题发生
问题发现
在学习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,报错。
问题解决
后面发现官网介绍的版本好像不一样,难道是这个原因(不是吧!!),然后把pom文件版本换低点。
<dependency>
<groupId>jakarta.inject</groupId>
<artifactId>jakarta.inject-api</artifactId>
<version>1.0</version>
</dependency>
项目都报红了,发现原先的包名报错了,于是重新引入才发现问题。
- 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
*/
}
}
问题解决。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题
这篇文章主要介绍了jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题,本文直接给出实现代码,需要的朋友可以参考下2015-02-02


最新评论