Estoy usando Spring MVC para mi aplicación web. Mis frijoles están escritos en el spring-servlet.xml
archivo " "
Ahora tengo una clase MyClass
y quiero acceder a esta clase usando spring bean
En el spring-servlet.xml
he escrito siguiendo
<bean id="myClass" class="com.lynas.MyClass" />
Ahora necesito acceder a esto usando ApplicationContext
ApplicationContext context = ??
Para que yo pueda hacer
MyClass myClass = (MyClass) context.getBean("myClass");
¿¿Como hacer esto??
java
spring
spring-mvc
servlets
LynAs
fuente
fuente
Respuestas:
Simplemente inyéctelo ..
o implementar esta interfaz: ApplicationContextAware
fuente
ApplicationContextProvider.java
respuesta parece ser la solución más confiable para esto.Creo que este enlace demuestra la mejor manera de obtener el contexto de la aplicación en cualquier lugar, incluso en la clase que no es bean. Me resulta muy útil. Espero que sea lo mismo para ti. El siguiente es el código abstracto de la misma.
Cree una nueva clase ApplicationContextProvider.java
Agregue una entrada en application-context.xml
En caso de anotaciones (en lugar de application-context.xml)
Obtén el contexto como este
¡¡Salud!!
fuente
ApplicationContextProvider.getApplicationContext()
. Luego, cuando llega el momento de necesitar el contexto actual de la aplicación, invoco:ApplicationContextProvider appContext = ApplicationContextProvider.getApplicationContext()
@Component
enApplicationContextProvider
la configuración puede evitar enaplication-context.xml
En caso de que necesite acceder al contexto desde dentro de un HttpServlet que Spring no instancia en sí mismo (y por lo tanto, ni @Autowire ni ApplicationContextAware funcionarán) ...
o
En cuanto a algunas de las otras respuestas, piénselo dos veces antes de hacer esto:
... ya que esto no le da el contexto actual, sino que crea otra instancia del mismo para usted. Lo que significa que 1) una cantidad significativa de memoria y 2) los beans no se comparten entre estos dos contextos de aplicación.
fuente
Si está implementando una clase que no es instanciada por Spring, como un JsonDeserializer, puede usar:
fuente
ContextLoader.getCurrentWebApplicationContext()
Agrega esto a tu código
Esto simplemente inyectará myClass en su aplicación
fuente
basado en la respuesta de Vivek, pero creo que lo siguiente sería mejor:
Escribir desde un método de instancia en un campo estático es una mala práctica y peligrosa si se manipulan varias instancias.
fuente
org.springframework.core.io.ContextResource
interfaz. Sugeriría elegir un nombre diferente para la clase internaContextResource
solo para evitar desorden.Hay muchas formas de obtener el contexto de la aplicación en la aplicación Spring. Los que se dan a continuación:
A través de ApplicationContextAware :
Aquí el
setApplicationContext(ApplicationContext applicationContext)
método obtendrá el applicationContextA través de Autowired :
aquí
@Autowired
palabra clave proporcionará el applicationContext.Para más información visite este hilo
Gracias :)
fuente
Otra forma es inyectar applicationContext a través de servlet.
Este es un ejemplo de cómo inyectar dependencias al usar los servicios web de Spring.
La forma alternativa es agregar el contexto de la aplicación en su web.xml como se muestra a continuación
Básicamente, está intentando decirle al servlet que debe buscar beans definidos en estos archivos de contexto.
fuente
Paso 1 : inyecte el siguiente código en clase
Paso 2 : Escribe Getter & Setter
Paso 3 : defina autowire = "byType" en el archivo xml en el que se define el bean
fuente
Incluso después de agregar @Autowire si su clase no es un RestController o una clase de configuración, el objeto applicationContext era nulo. Intenté crear una nueva clase con la siguiente y está funcionando bien:
luego puede implementar un método getter en la misma clase según su necesidad, como obtener la referencia de clase implementada mediante:
fuente
Entonces puedes recuperar el bean:
Referencia: springbyexample.org
fuente