Java 如何在春天创建两次单例bean?

Java 如何在春天创建两次单例bean?,java,spring,singleton,Java,Spring,Singleton,我最近访问了intrview,有人多次问我如何强制spring创建单例bean 正如我正确理解的,若你们有几个上下文,那个么这是可能的,但我不理解这个机制 请给我解释一下 github示例会很好。您可以通过使用不同的@限定符多次声明bean来注入多个实例: @Configuration public class YourConfiguration { @Bean @Qualifier("first") public Model firstInstance() {

我最近访问了intrview,有人多次问我如何强制spring创建单例bean

正如我正确理解的,若你们有几个上下文,那个么这是可能的,但我不理解这个机制

请给我解释一下


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在引擎罩下工作的。你是说这个问题?它是同一类型的不同单例。它是一种类型,多次实例化。在我看来,这是合情合理的。任何可能的解决方案都是“同一类型的不同单体”,不是吗?无论如何,这是你的问题,所以你选择你认为是一个很好的答案!它是同一类型的不同单例。它是一种类型,多次实例化。在我看来,这是合情合理的。任何可能的解决方案都是“同一类型的不同单体”,不是吗?无论如何,这是你的问题,所以你选择你认为是一个很好的答案!