Estou usando Spring MVC para meu aplicativo da web. Meus grãos estão escritos no spring-servlet.xml
arquivo " "
Agora eu tenho uma aula MyClass
e quero acessá-la usando Spring Bean
No spring-servlet.xml
eu escrevi a seguir
<bean id="myClass" class="com.lynas.MyClass" />
Agora eu preciso acessar isso usando ApplicationContext
ApplicationContext context = ??
Para que eu possa fazer
MyClass myClass = (MyClass) context.getBean("myClass");
Como fazer isso??
java
spring
spring-mvc
servlets
LynAs
fonte
fonte
Respostas:
Basta injetar ..
ou implemente esta interface: ApplicationContextAware
fonte
ApplicationContextProvider.java
resposta parece ser a solução mais confiável para isso.Acho que este link demonstra a melhor maneira de obter o contexto do aplicativo em qualquer lugar, mesmo na classe não-bean. Acho muito útil. Espero que seja o mesmo para você. A seguir está o código abstrato dele
Crie uma nova classe ApplicationContextProvider.java
Adicione uma entrada em application-context.xml
No caso de anotações (em vez de application-context.xml)
Obtenha o contexto como este
Felicidades!!
fonte
ApplicationContextProvider.getApplicationContext()
método estático . Então, quando é hora de precisar do contexto do aplicativo atual, invoco:ApplicationContextProvider appContext = ApplicationContextProvider.getApplicationContext()
@Component
naApplicationContextProvider
configuração pode evitar emaplication-context.xml
Caso você precise acessar o contexto de dentro de um HttpServlet que não é instanciado pelo Spring (e, portanto, nem @Autowire nem ApplicationContextAware funcionarão) ...
ou
Quanto a algumas das outras respostas, pense duas vezes antes de fazer isso:
... já que isso não fornece o contexto atual, em vez disso, cria outra instância dele para você. O que significa 1) bloco significativo de memória e 2) beans não são compartilhados entre esses dois contextos de aplicativo.
fonte
Se você está implementando uma classe que não é instanciada pelo Spring, como um JsonDeserializer, você pode usar:
fonte
ContextLoader.getCurrentWebApplicationContext()
Adicione isso ao seu código
Isso simplesmente injetará myClass em seu aplicativo
fonte
com base na resposta de Vivek, mas acho que o seguinte seria melhor:
Gravar de um método de instância em um campo estático é uma prática ruim e perigosa se várias instâncias estiverem sendo manipuladas.
fonte
org.springframework.core.io.ContextResource
interface. Eu sugeriria escolher um nome diferente para a classe internaContextResource
apenas para evitar confusão.Existem muitas maneiras de obter o contexto do aplicativo no aplicativo Spring. Esses são dados abaixo:
Via ApplicationContextAware :
Aqui
setApplicationContext(ApplicationContext applicationContext)
você obterá o método applicationContextVia Autowired :
Aqui, a
@Autowired
palavra-chave fornecerá o applicationContext.Para mais informações visite este tópico
Obrigado :)
fonte
Outra maneira é injetar applicationContext por meio do servlet.
Este é um exemplo de como injetar dependências ao usar serviços da web Spring.
A maneira alternativa é adicionar o contexto do aplicativo em seu web.xml como mostrado abaixo
Basicamente, você está tentando dizer ao servlet que ele deve procurar por beans definidos nesses arquivos de contexto.
fonte
Etapa 1 : injetar o seguinte código na aula
Etapa 2 : Escreva Getter e Setter
Etapa 3 : defina autowire = "byType" no arquivo xml no qual o bean é definido
fonte
Mesmo depois de adicionar @Autowire se sua classe não for um RestController ou uma classe de configuração, o objeto applicationContext estava vindo como nulo. Tentei criar uma nova classe com a seguir e está funcionando bem:
você pode, então, implementar um método getter na mesma classe de acordo com sua necessidade, como obter a referência de classe implementada por:
fonte
Então você pode recuperar o bean:
Referência: springbyexample.org
fonte