Java 如何在春天创建两次单例bean?
我最近访问了intrview,有人多次问我如何强制spring创建单例bean 正如我正确理解的,若你们有几个上下文,那个么这是可能的,但我不理解这个机制 请给我解释一下Java 如何在春天创建两次单例bean?,java,spring,singleton,Java,Spring,Singleton,我最近访问了intrview,有人多次问我如何强制spring创建单例bean 正如我正确理解的,若你们有几个上下文,那个么这是可能的,但我不理解这个机制 请给我解释一下 github示例会很好。您可以通过使用不同的@限定符多次声明bean来注入多个实例: @Configuration public class YourConfiguration { @Bean @Qualifier("first") public Model firstInstance() {
github示例会很好。您可以通过使用不同的
@限定符多次声明bean来注入多个实例:
@Configuration
public class YourConfiguration {
@Bean
@Qualifier("first")
public Model firstInstance() {
return new Model();
}
@Bean
@Qualifier("second")
public Model secondInstance(){
return new Model();
}
}
...
@Autowired
@Qualifier("first")
private Model first;
@Autowired
@Qualifier("second")
private Model second;
通过使用不同的@限定符多次声明bean,可以注入多个实例:
@Configuration
public class YourConfiguration {
@Bean
@Qualifier("first")
public Model firstInstance() {
return new Model();
}
@Bean
@Qualifier("second")
public Model secondInstance(){
return new Model();
}
}
...
@Autowired
@Qualifier("first")
private Model first;
@Autowired
@Qualifier("second")
private Model second;
拥有同一个单例bean的多个副本有不同的方法,但您必须为Spring提供一种区分它们的方法。IMHO最简单的方法是完全配置父bean,然后使用parent属性声明它的副本
事实上,这是用来让几个bean具有相同的类和几乎相同的配置,每个bean通过属性中的差异进行专门化。您只能通过名称来区分它们,实际上必须通过名称来注入它们。拥有同一个单例bean的多个副本有不同的方法,但您必须为Spring提供一种区分它们的方法。IMHO最简单的方法是完全配置父bean,然后使用parent属性声明它的副本
事实上,这是用来让几个bean具有相同的类和几乎相同的配置,每个bean通过属性中的差异进行专门化。您只能通过名称来区分它们,实际上必须通过名称来注入它们。您可以使用@Qualifier为单例作用域bean指定不同的名称,然后简单地自动连接它们
@Component
@Qualifier(value ="first, second")
public class Scope {
}
@Component
public class MyClass {
@Autowired
private Scope first;
@Autowired
private Scope second;
}
您可以使用@Qualifier为您的单例作用域bean指定一个不同的名称,然后简单地自动连接它们
@Component
@Qualifier(value ="first, second")
public class Scope {
}
@Component
public class MyClass {
@Autowired
private Scope first;
@Autowired
private Scope second;
}
只有通过故意引入某种bug,他们为什么会问你怎么做是个谜。@EJP看起来像questuin,展示了Devkopers是如何理解spring在引擎罩下工作的。你是说这个问题?只有通过故意引入某种bug,他们为什么会问你怎么做是个谜。@EJP看起来像questuin,展示了Devkopers是如何理解spring在引擎罩下工作的。你是说这个问题?它是同一类型的不同单例。它是一种类型,多次实例化。在我看来,这是合情合理的。任何可能的解决方案都是“同一类型的不同单体”,不是吗?无论如何,这是你的问题,所以你选择你认为是一个很好的答案!它是同一类型的不同单例。它是一种类型,多次实例化。在我看来,这是合情合理的。任何可能的解决方案都是“同一类型的不同单体”,不是吗?无论如何,这是你的问题,所以你选择你认为是一个很好的答案!