Pergunta

Como no título acima, estou confuso sobre os prós e contras entre injetar applicationContext diretamente pela anotação @Autowired ou implementar a interface ApplicationContextAware em um bean spring singleton.

Qual você prefere em quais casos e por quê?Obrigado.

Foi útil?

Solução

Na verdade, ambos são ruins.Ambos amarram sua inscrição para a estrutura da mola, invertendo assim todo o conceito de inversão de controle.Em um mundo ideal, sua inscrição não deve estar ciente de ser gerenciada por um aplicativoContext.

Depois de ter escolhido violar este princípio, isso não importa como você o faz.ApplicationContextAware é a versão legada que tem sido em torno de emmenos desde a versão 2.0 .A @Autowired é um mecanismo mais novo, mas eles trabalham praticamente da mesma maneira.Eu provavelmente iria com a ApplicationContextAware, porque ela semanticamente deixa claro o que é.

Outras dicas

Como o @sean Patrick Floyd diz, a necessidade de ApplicationContext é muitas vezes devido a um design ruim.Mas às vezes você não tem outra opção.Nesses casos, prefiro o uso de @Autowired porque é a maneira como eu injetar todas as outras propriedades.Então, se eu usar @Autowired para injetar myrepository, por que não posso usá-lo para applicationcontext ou qualquer outro feijão de primavera?

Eu uso interfaces de primavera apenas para essas coisas que não posso fazer com anotações, por exemplo, BeannameAware.

Se você precisar obter um protótipo em um singleton, então você pode usar a injeção de método.Basicamente, você cria um método abstrato que retorna o objeto que você precisa e a primavera retornará o protótipo toda vez que você chamar esse método.Você define o "Método de Lookup" em sua configuração de primavera.Aqui estão alguns links: http://docs.spring.io / spring / docs / 1.2.9 / referência / beans.html # feijão-fábrica-método-injeção http://java.dzone.com/articles/method-injectionspring

Já que você está não estendendo nenhuma das classes do Spring, seu aplicativo está sempre separado do framework.Na maioria dos casos você não vai querer injetar o ApplicationContext como ele, mas precisará injetar os beans definidos no ApplicationContext.

O melhor caso é sempre manter o mínimo, até e a menos que você tenha algum requisito específico e isso é muito simples com a primavera.

Então, também

  1. Anote seus feijões e scan eles dentro application context, então use @Autowire para conectá-los.

  2. Usar application context para conectar suas conveniências de bean (configurações antigas de estilo xml).Você pode usar @Autowire com esta abordagem também.

Quando quiser controlar o ciclo de vida do bean, você pode ler a API e personalizá-la, mas na maioria das vezes essas configurações gerais farão o trabalho.

Aqui estão alguns exemplos.

  1. Spring Auto-Wiring Beans com anotação @Autowired
  2. Estilo XML do Spring Auto-Wiring Beans
  3. Documentos da API do contêiner Spring IoC
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top