我正在尝试在我的配置类中编写这两个bean:
@Bean
public Foo2 foo2() {
return new Foo2(foo1("test"));
}
@Bean
public Foo1 foo1(String name) {
return new Foo1(name);
}
但是我在 name
下收到一个错误标记,提示 无法 Autowiring 。找不到 String 类型的 beans。
知道如何正确连接这些 beans 吗?
最佳答案
Spring 需要知道从哪里获取 name 属性。您可以使用@Value
注释。
值为“Name”的名称
@Value("Name")
具有从属性文件加载的值的名称
@Value("${name.property}")
具有从属性文件加载的值的名称或默认值“Name”表示未找到属性。
@Value("${name.property:Name}")
完整的解决方案是:
@Bean
public Foo2 foo2(Foo1 foo1) {
return new Foo2(foo1);
}
@Bean
public Foo1 foo1(@Value("${name.property:test}") final String name) {
return new Foo1(name);
}
更新
如果您想要具有不同名称属性的 bean 的多个实例,那么您需要创建多个方法并使用 @Qualifier
Autowiring :
@Bean
public Foo2 bar2(@Qualifier("bar1") Foo1 bar1) {
return new Foo2(bar1);
}
@Bean
public Foo2 foo2(@Qualifier("foo1") Foo1 foo1) {
return new Foo2(foo1);
}
@Bean
public Foo1 foo1(@Value("test foo1") final String name) {
return new Foo1(name);
}
@Bean
public Foo1 bar1(@Value("test bar1") final String name) {
return new Foo1(name);
}
如果您没有将每个 Foo1 实例用作需要注入(inject)到多个位置的单例,则无需使用 spring 来管理它。如果是这种情况,那么您可以删除 @Bean
注释:
@Bean
public Foo2 foo2() {
return new Foo2(foo1("test"));
}
@Bean
public Foo2 bar2() {
return new Foo2(foo1("test bar2"));
}
public Foo1 foo1(final String name) {
return new Foo1(name);
}
关于java - 使用参数args编写JavaConfig bean间依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35702475/