Ter muitos beans não utilizados em um contexto Spring Bean desperdiça recursos significativos?

StackOverflow https://stackoverflow.com/questions/98320

  •  01-07-2019
  •  | 
  •  

Pergunta

Minha camada de modelo está sendo usada por vários projetos diferentes e eu gostaria de usar um único arquivo XML Spring Configuration para o modelo, independentemente de qual projeto o está usando.

Minha pergunta é:Como nem todos os beans são usados ​​em todos os projetos, estou desperdiçando recursos em uma quantidade significativa se não forem instanciados?Não tenho muita certeza de quão preguiçoso o Spring é em carregá-los, já que isso nunca foi um problema até agora.

Alguma ideia?

Foi útil?

Solução

Retirado do Manual de referência da primavera:

O comportamento padrão para implementações de ApplicationContext é pré-instanciar todos os beans singleton na inicialização.Pré-instanciação significa que um ApplicationContext criará e configurará avidamente todos os seus beans singleton como parte de seu processo de inicialização.Geralmente isso é bom, porque significa que quaisquer erros na configuração ou no ambiente circundante serão descobertos imediatamente (em vez de possivelmente horas ou até dias depois).

No entanto, há momentos em que esse comportamento não é o desejado.Se você não deseja que um bean singleton seja pré-instanciado ao usar um ApplicationContext, você pode controlar isso seletivamente marcando uma definição de bean como inicializada lentamente.Um bean inicializado lentamente indica ao contêiner IoC se uma instância de bean deve ou não ser criada na inicialização ou quando é solicitada pela primeira vez.

Ao configurar beans via XML, esse carregamento lento é controlado pelo atributo 'lazy-init' no [elemento bean] ;por exemplo:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>

Mas, a menos que seus beans estejam usando recursos como bloqueios de arquivos ou conexões de banco de dados, eu não me preocuparia muito com sobrecarga simples de memória se for mais fácil para você ter essa configuração para vários perfis (mas diferentes).

Outras dicas

Além dos outros comentários:também é possível especificar um arquivo de configuração inteiro para ser inicializado lentamente, usando o atributo 'default-lazy-init' no <beans/> elemento;por exemplo:

<beans default-lazy-init="true">
    <!-- no beans will be pre-instantiated... -->
</beans>

Isto é muito mais fácil do que adicionar o lazy-init atribua a cada feijão, se você tiver muitos deles.

Por padrão, os beans Spring são singletons e são instanciados quando o contexto do aplicativo é criado (na inicialização).Então, supondo que você não tenha substituído o comportamento padrão, uma única instância de cada bean será criada.

Depende dos objetos.

Porém, o código não utilizado é 'ruim' e aumentará o custo de manutenção.

Melhor excluir as referências e classes.Você sempre pode restaurar a partir do controle de versão se for necessário posteriormente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top