当前位置: 首页 > 知识库问答 >
问题:

IntelliJ的想法将bean标记为参数的不能autowire错误,但代码可以工作

盖诚
2023-03-14

我在我的项目中有以下类和配置:

public class Op {       
    public Op(Comp comp) {
        // Construct Op
    }
}

public interface OpFactory {       
    public Op createOp(Comp comp);
}

和Spring配置:

@Configuration
public class OpConfig {

    @Bean
    @Scope(SCOPE_PROTOTYPE)
    Op op(Comp comp) {      // <--- Intellij marks this as error
        return new Op(composition);
    }

    @Bean
    OpFactory opFactory() {
        return new OpFactory() {
            @Override
            public Op createOp(Comp comp) {
                return op(comp);
            }
        };
    }

}

这段代码可以工作,但是IntelliJ IDEA在配置中显示了一个错误,说明不能自动执行。未找到“comp”类型的bean。Comp本身是一个pojo,不需要autowired,正如您所看到的,工厂为Op ctor提供了一个。

此外,我不需要comp被autowired,因为一旦我有了工厂,我就可以简单地传递它,正如我所说的comp本身就是一个POJO。用法示例:

Comp comp = new Comp();
OpFactory opFactory = getFactoryFromContext();
opFactory.createOp(comp);

我不需要comp被autowired,事实上我不能让它autowired,因为我在运行时基于用户输入构建它。

共有1个答案

冀鸿才
2023-03-14

嗯,IntelliJ说的是正确的,因为你承认你的薪酬只是一个pojo,你已经得到了它。因此,当spring尝试根据以下内容初始化Op的Bean时,该错误是正确的,

@Bean
@Scope(SCOPE_PROTOTYPE)
Op op(Comp comp) {      // <--- Intellij marks this as error
    return new Op(composition);
}

很明显你没有Comp bean。所以错误是正确的。

但是关于它为什么真正有效的问题,实际上由于spring不能初始化bean,它只是跳过了它,然后发生了类似于这样的事情,

Op op(Comp comp) {     
    return new Op(composition);
}

@Bean
OpFactory opFactory() {
    return new OpFactory() {
        @Override
        public Op createOp(Comp comp) {
            return op(comp);
        }
    };
}
 类似资料:
  • 它是这篇文章的副本,并添加了信息(因为它不是其他类似问题的副本)。 我只是在新计算机上安装了Intellij的最新版本,无法使Maven在空项目中正常工作。 当Maven启动时,它试图下载所有的插件,但它停留在无限的下载中。我尝试添加一些依赖项,并获得该依赖项的无限下载 我发现很多人都有这样的问题,但这个解决方案对我不起作用。 此外,我试图在idea Maven设置中更新主存储库手册中的信息,并得

  • 我有一本书。带有字符串的java文件。 当我在中打开这个文件并将编码更改为ISO-8859-1时,它会显示适当的字符串:,但如果我在理念intellij中打开文件并将编码更改为ISO-8859-1,它会给我一个警告,即某些符号无法转换,然后用标记替换这些符号:。 为什么会这样?为什么Notepad可以转换文件,而idea不能?

  • 我在这个论坛上读到了很多关于尝试Autowire pojo时发生的类似问题的文章,通常修复的答案与或/有关。但是,在我的例子中,我设法autowire我的pojo(Mas60010),但我不能autowire或以及可能来自我没有编写代码的包的任何其他对象。 为了简单起见,我只提到。我做错了什么?我想问题要么出在库上,要么出在配置上。注意:请不要仅仅通过显示一个与他自己的POJO相关的问题来指出这个

  • 正如你在下面看到的,我得到了矛盾的结果。感谢所有的帮助。 Firebase控制台查询 Firebase控制台查询结果 密码 代码日志

  • 嗨,我有一个spring boot项目。主类包如下所示: 我在项目中使用了一个外部jar作为maven依赖项。在该jar中,有一个用@service注释的服务类,如下所示: 其中SomeServiceImpl类的主包如下所示: 现在,在我的项目中,当我自动连接类时,我在运行spring boot应用程序时遇到了bean创建错误。我就是这样做的: 错误:

  • 我想为Dao类编写一个JUnit测试。dao不需要任何save方法,因为它只读取一些数据。 测试使用的是HSQLDB,我需要先插入一些测试数据。由于我不想只编写代码来使测试运行,所以我扩展了DaoImpl类,使其具有一个save方法。