contexto da aplicação. O que é isso?

Meus colegas costumam usar a palavra “contexto de aplicação”. Em muitos artigos, essa colocação também é usada com muita frequência.

Meu entendimento atual: o contexto do aplicativo é um arquivo xml único.

Mas eu entendo que se eu estivesse certo, as pessoas não usariam o “contexto do aplicativo” em vez do arquivo xml de configuração.

Você pode me ajudar a lidar com esse problema?

@feak dá uma resposta direta sobre o significado de ApplicationContext em termos de Spring. Em suma, é o contexto que carrega a configuração (geralmente um arquivo XML) e, em seguida, o Spring começará a gerenciar os beans e seus benefícios:

  • Feijão declarado no pacote
  • Beans declarados por annotations (se essa configuração estiver ativada)
  • Autowiring de feijão e método
  • Injeção de feijão
  • Configuração, carregamento do arquivo .properties
  • etc

Para iniciar um contexto de aplicativo, você pode usar um dos seguintes:

  • Carregue manualmente o contexto do aplicativo no início de seu aplicativo. Isso é feito para fins de amostra ou em aplicativos independentes:

     public class Foo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml"); //use the context as you wish... } } 
  • No caso de aplicativos da Web Java que usam o Spring MVC, o DispatchServlet carregará o contexto do aplicativo para você, portanto, você só precisará criar um arquivo springapp-servlet.xml na pasta WEB-INF do aplicativo.

Observe que um contexto de aplicativo está associado a uma única configuração (baseada em XML ou não). Período.


Depois de entender isso, você também pode entender que pode ter mais de um contexto de aplicativo por aplicativo. Isto é, ter dois ou mais ApplicationContext s no mesmo aplicativo. A partir do último exemplo no aplicativo de console, é fácil verificar:

 public class Foo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("path/to/applicationContext.xml"); ApplicationContext context2 = new ClassPathXmlApplicationContext("path/to/applicationContext.xml"); //use the context as you wish... } } 

Observe que temos dois contextos de aplicativo usando a mesma configuração XML. Você pode fazer isso? Sim, você está realmente vendo isso aqui. Qual é a diferença então? A principal diferença é que os escopos singleton do Spring beans são singleton por contexto de aplicativo , isso significa que quando recuperar um bean Bar que é configurado no arquivo applicationContext.xml do context não será o mesmo que recuperá-lo do context2 , mas várias recuperações do context retornarão o context mesma instância de bean de Bar .

Isto é considerado uma boa ou má prática? Nem dependerá do problema a ser resolvido (no caso do último exemplo, eu diria que é uma prática ruim ). A maioria das pessoas recomendaria que todos os seus beans fossem configurados em um único local (via XML ou outro) e carregados por um único contexto de aplicativo.

Eu acho que vocês colegas queriam dizer o contexto do aplicativo carregado de mola, que permite o access a:

  • configuração de aplicação,
  • feijão inicializado,
  • events de aplicação api,
  • etc