java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @Inject注解和@Named注解注入失败

@Inject注解和@Named注解注入失败

作者:成为大佬先秃头

在学习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>

项目都报红了,发现原先的包名报错了,于是重新引入才发现问题。

至此问题解决,运行一下:

@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
         */
    }
}

问题解决。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文