Scope_prototyped bean在启动时实例化,但由于无法自动装配而失败

时间:2020-10-30 12:24:23

标签: java spring spring-boot

我想使用ObjectFactory用一些自定义参数创建原型bean。在需要豆的地方,我有以下东西:

private final ObjectProvider<Installation> installationProvider;

public void test() {
  Installation installation = installationProvider.getObject("url");
}

我将其配置为:

@Configuration
public class MyConfiguration {

    @Bean
    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    public Installation createInstallation(String url) {
        return new Installation(url);
    }
}

但是当我启动应用程序时,出现以下异常:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method createInstallation in com.mycompany.MyConfiguration required a bean of type 'java.lang.String' that could not be found.


Action:

Consider defining a bean of type 'java.lang.String' in your configuration.

鉴于这是在启动时发生的,似乎Spring尝试在启动时自动装配该bean。但是,据我了解,范围为SCOPE_PROTOTYPE的bean不应在运行时自动装配,因为我想在运行时使用不同的参数来创建bean。

2 个答案:

答案 0 :(得分:1)

我发现了问题。我有一个单独的服务,该服务是我为进行测试而创建的(而忘了):

@Service
public class TestSomething {
    private final Installation installation;

    @Autowired
    public TestSomething(Installation installation) {
        this.installation = installation;
    }
}

由于此服务在启动时已连接,显然,它还将尝试自动连接依赖项。

答案 1 :(得分:1)

我已经建立了一个像您一样的示例项目,它可以按预期工作。每次对installationProvier.getObject(“ url”)的调用都会返回installtaion bean的新实例。

您确定您的应用程序不会通过另一个类中的@Autowire访问Bean吗?