【发布时间】:2020-03-03 00:46:44
【问题描述】:
有谁知道如何使用动态参数调用 bean?我一直在用这种方法挣扎并陷入困境。请帮忙。
所以问题来了,我在 StoreService 中通过 @autowired 调用了构建器,但是构建器总是返回这个错误
通过构造函数参数0表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“java.lang.String”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{}
我知道这个问题是因为构造函数的参数设置不正确,我不知道如何定义构造函数的参数来执行 DI。我已经尝试了不同的方法,但仍然得到同样的错误。
这是我做的代码。
配置类来启动 bean。
@Configuration
public class BuilderConfig {
@Bean
@Scope("prototype")
public ObjectBuilder builder(final String title, final String filename, final String text) {
return new ObjectBuilder(title, filename, text);
}
}
ObjectBuilder 类。
@Component
public class ObjectBuilder {
private String title;
@Autowired(required = false)
public ObjectBuilder(final String title, final String filename, final String text) {
this.title= title;
this.build(filename, text);
}
public void build(String filename, String text) {
// build data
}
public void publish() {
// to publish data
}
}
调用构建器类的类。
@service
public class StoreServiceImpl implements StoreService {
@Autowired
private ObjectBuilder builder;
public void save(final String title, final String filename, final String text) {
this.save(builder.publish());
}
}
【问题讨论】:
-
从
ÒbjectBuilder中删除@Component。这也不起作用,因为每次在save方法中需要它时,您都需要获取ObjectBuilder。为什么这种复杂性而不仅仅是自己创建一个新实例。使用new没有任何问题。
标签: java spring spring-boot dependency-injection