Java 结合Spring构造函数依赖项注入和简单参数
我有一个在构造函数中自动连接bean的原型bean:Java 结合Spring构造函数依赖项注入和简单参数,java,spring,dependency-injection,spring-bean,Java,Spring,Dependency Injection,Spring Bean,我有一个在构造函数中自动连接bean的原型bean: @Component @Scope("prototype") public class MyClass { // Autowired annotation not needed in Spring 5 public MyClass(UserRepository userRepository) { } } 此bean是通过以下方式创建的: MyClass myClass = beanFactory.getBean(
@Component
@Scope("prototype")
public class MyClass {
// Autowired annotation not needed in Spring 5
public MyClass(UserRepository userRepository) {
}
}
此bean是通过以下方式创建的:
MyClass myClass = beanFactory.getBean(MyClass.class);
一切顺利。但是现在我想在创建bean时包含一个参数:
MyClass myClass = beanFactory.getBean(MyClass.class, "just-a-string");
// Bean constructor:
public MyClass(String str, UserRepository userRepository) {
}
但这会导致以下错误:
创建名为“myClass”的bean时出错。。。无法解析匹配的构造函数(提示:为简单参数指定索引/类型/名称参数以避免类型歧义)
如何将构造函数依赖项注入与简单参数结合起来
编辑
如错误所示,找不到匹配的构造函数。当我使用它来创建to bean时:
MyClass myClass = beanFactory.getBean(MyClass.class, "just-a-string", null);
bean创建成功了,但是我稍后当然会得到一个空指针
编辑2
如果我使用现场注入,这种情况将被避免,但据我所知,现场注入是不被鼓励的:
@Autowired
UserRepository userRepository
public MyClass(String str) {
}
在application.properties中声明此字符串,然后使用
@Value
在MyClass中获取它。然后,您不需要传递任何字符串。我已经阅读了@Value选项,但我希望每个原型bean的字符串值都不同;你从哪里打电话给getBean?你能把那个密码写出来吗。您可以在该类中自动连接userRepository并将其传递给getBean