我正在尝试在配置类中编写这两个bean:
@Bean
public Foo2 foo2() {
return new Foo2(foo1("test"));
}
@Bean
public Foo1 foo1(String name) {
return new Foo1(name);
}
但是我在name
下得到一个错误标记Could not autowire. No beans of String type found.
任何想法如何正确连接这些bean?
答案 0 :(得分:2)
Spring需要知道whare才能从中获取name属性。您可以使用@Value
注释。
名称为"名称"
@Value("Name")
带有从属性文件加载的值的名称
@Value("${name.property}")
带有从属性文件加载的值的名称或默认值为"名称"找不到财产。
@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
创建多个方法并自动装配:
@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
实例用作需要注入多个位置的单例,则无需使用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);
}