春季问题。
我有两个与春天有关的问题。
如果我这样声明bean:
@Service
public class Downloader {
@Bean
public String bean1() {
return "bean1";
}
}
然后,如果其他类将自动装配“ bean1”,那么方法bean1将被调用几次?还是将创建并重用一个bean1实例?
第二个问题。如何自动连接其他bean,例如“ bean2”,它是可用于构造bean1的字符串“ externalBean”。
@Service
public class Downloader {
@Autowire
private String bean2;
@Bean
public String bean1() {
return "bean1" + this.bean2;
}
}
当前,我正在尝试自动装配bean2,但是在bean1调用期间它为null。有什么机制可以指定此顺序。我不知道在什么情况下Spring文档中会寻找这种信息。
答案 0 :(得分:1)
仅使用简单的@Bean
注释即可将范围设置为标准单例,因此将仅创建一个。根据文档,如果要更改,则需要显式添加另一个注释:
@Scope将Bean的范围从单例更改为指定范围
答案 1 :(得分:1)
然后,如果其他类将自动装配“ bean1”,则使用方法bean1 会被叫几次?否则将创建一个bean1实例 并重复使用?
只有bean1
的一个实例,因为隐式范围是 Singleton (不存在@Scope
注释)。
第二个问题。如何自动连接其他bean,例如“ bean2”是 可用于构造bean1的字符串“ externalBean”。
由于它是String
,因此需要@Qualifier
可能
@Bean
@Qualifier("bean2")
public String bean2() {
return "bean2";
}
然后
@Bean
public String bean1(@Qualifier("bean2") final String bean2) {
return "bean1" + bean2;
}
但是,这也可行。
Spring将能够查看Bean的名称并将其与参数的Bean进行比较。
@Bean
public String bean2() {
return "bean2";
}
和
@Bean
public String bean1(final String bean2) {
return "bean1" + bean2;
}
订单是由Spring根据Bean依赖关系自动计算的。