我想使用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。
答案 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吗?