Sobes.tech
Middle

Existe a possibilidade de criar dois Singleton no Spring?

sobes.tech IA

Resposta da IA

Sim, a possibilidade existe, embora vá contra o objetivo principal do padrão Singleton (uma única instância). No Spring, isso é alcançado pelos seguintes mecanismos:

  1. Contextos Spring diferentes: Se você tiver dois contextos Spring diferentes (por exemplo, em uma aplicação monolítica dividida em módulos, cada um com seu próprio contexto, ou em um sistema distribuído onde cada serviço tem seu próprio contexto), cada contexto pode conter sua própria instância de um bean Singleton.

  2. Scope prototype: Embora por padrão o scope para os beans no Spring seja singleton, você pode explicitamente especificar scope="prototype" para um bean específico. O Spring então criará uma nova instância desse bean a cada solicitação.

    // Exemplo de configuração do Spring
    @Configuration
    public class AppConfig {
    
        @Bean
        @Scope("prototype") // Especificamos o scope prototype
        public MyPrototypeBean myPrototypeBean() {
            return new MyPrototypeBean();
        }
    }
    
    // Exemplo de bean
    public class MyPrototypeBean {
        // ...
    }
    
  3. Ligação com bibliotecas que têm seus próprios contextos: Se sua aplicação usa bibliotecas que por si mesmas inicializam seus próprios contextos Spring e registram neles beans Singleton, então na sua aplicação principal e nessa biblioteca pode haver uma instância da mesma classe, registrada como Singleton em cada um dos contextos.

É importante entender que criar várias instâncias de uma classe que foi pensada como Singleton muitas vezes indica um problema potencial na arquitetura ou uso incorreto do padrão. Normalmente, se mais de uma instância for necessária, o escopo Singleton não é adequado.