Una Manera Fácil De Recibir Un Grano De Inyector Con Resorte Cuando Un Filtro De Servlet
November 27, 2021Está leyendo efectivamente estos métodos de corrección si está obteniendo el código de error Spring Inject Bean en los filtros de servlets de la máquina real.
Recomendado: Fortect
Para dar una idea clara de cómo se pueden ver los chiles en diferentes contextos
En la limpieza, solo hay dos tipos vinculados con contextos
1. Raíz (contexto del contexto específico cargado por ContextLoaderListener)
2. Servlet (contexto cargado desde DispatcherServlet)
Beans definidos en RootContext ¿Visibles en ServletContext? – SÍ
Los componentes coherentes en todo el contexto raíz pueden estar siempre visibles de forma predeterminada utilizando la mayoría de los contextos de servlet. La capacidad para, sin duda, el bean dataSource definido en el contexto Cheer se puede acceder aquí que se encuentra en el contexto del servlet como se indica a continuación.
@configurationpublic .class .RootConfiguration ... ... ... ... @ Frijol :. ... .public .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Construcción@ActiverWebMvc@ComponentScan (basePackages significa "com.pvn.mvctiles")Herramientas de disposición de servlet de clase pública WebMvcConfigurer @Autowired fuente de datos privada DataSource; ...
Los beans definidos en términos de ServletContext son visibles en RootContext, por ejemplo, Sí *
applicationContext.getBeanDefinitionNames ();
2.Si desea recibir frijoles secos del contexto vinculado con el servlet en una colación junto con otra etiqueta de servlet, agregue nuestro propio paquete base "org.springframework.web.servlet"
a su clase principal . Configuración / xml
@configuration@ComponentScan (basePackages = "org.springframework.web.servlet")RootConfiguration de clases públicas
Una vez agregados, definitivamente encontrará todos los componentes enumerados que se derivan del contexto del paquete
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, localeResolver
, requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Si alguna persona desea obtener sus propios granos de cacao en polvo en rootContext, agregue el mejor paquete base que valga la pena analizar los componentes de RootContext como se describe a continuación.
@configuration@ComponentScan (basePackages = "com.your.configuration.package", "org.springframework.web.servlet")Clase de universidad pública RootConfiguration
La configuración más alta es útil si lo desea, la obsesión incrustada está disponible en todo su RootContext y también en su nuevo filtro de servlet. Por alguna razón, si encuentra una excepción que aparece en un filtro y desea generar la misma respuesta de error, incluso la respuesta fue enviada desde HttpMessageConverter
pero configuró esta dirección en servletContext, los clientes pueden querer usar este convertidor compuesto para lanzar una respuesta compartida …
@Autowiredprivado ApplicationContext appContext;
ApplicationContext Autowiring no hace el trabajo porque este filtro de servlet ya que los filtros realmente parecen haber sido inicializados antes de que se inicializara el contenedor Spring. (Dependiendo del orden de su filtro, al mismo tiempo DelegatingProxyFilter)
clase pública YourFilter implementa filtros más privado ApplicationContext appContext; en Crush manifiesto evitar init (FilterConfig filterConfig) lanza ServletException Filter.super.init (filterConfig); appContext = WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
Espero que haya un truco claro para hacer que los frijoles estén disponibles en contextos.
(Por qué * Sí)
1. Inicializando el orden exacto de las circunstancias – rootCo firstntext más luego servletContext.Al inicializar rootContext usted. H. alrededor de la clase de configuración de contexto raíz y xml, si previamente intentas definir veg en tu servletContext favorito, buscará NULL. (dado que el servletContext aún no se ha inicializado, por lo que podemos decir que los componentes de espresso no se pueden ver / guardar en rootContext en el momento de la inicialización)
Pero puede definir frijoles secos aquí en servletContext después de la inicialización de servletContext (puede obtener frijoles a través del contexto de aplicaciones)
Utilice
WebApplicationContextUtils
:evita la inicialización básica (FilterConfig cfg) ApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean representa ctx.getBean (YourBeanType.class);
Con
DelegatingFilterProxy
, asigna quién podría filtrar a su declaración de filtro mientras está en bean. El proxy delegador simplemente llama a todos los beans que ejecutan toda la interfazFilter
.Utilice
@Configurable
disponible para su bloque. Sin embargo, me gustaría más cualquiera de las otras dos opciones. (Esta opción utiliza tejido de aspecto J)
Bean
UsersConnectionRepository significará (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Donde usersConnectionRepository
es sin duda probablemente el nombre / ID de su bean para el contexto de la aplicación de trabajo. O mejor:
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
open void init (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (esto);
Luego @inyecta tus frijoles centrales solitarios en ese cuidado, la misma posibilidad que para el otro frijol que probablemente pondrías.
@InjectRepositorio privado UsersConnectionRepository;
DelegatingFilterProxy se puede utilizar como cada proxy para filtros de servlet genéricos.
El DelegatingFilterProxy en sí mismo también ha sido un filtro de servlet que se asocia a un grano de café administrado por Spring especificado que implementa algún tipo de interfaz de salida separada.
Necesitamos cualquier tipo de lugar para que la superficie de destino de BeanName DelegatingFilterProxy sea el nombre del bean de destino (el bean que equipa la interfaz de filtrado).
Ejemplo
Implementación de filtros de servlet de vegetales
@Component ("myTestFilter")El curso público de MyFilter implementa filtros @Autowired MyService myService privado; - Aplastar La inicialización de reversión oficial (FilterConfig filterConfig) da como resultado ServletException @ Aplastar public void doFilter (ServletRequest, ServletResponse, Cadena de filtros) incluye IOException, ServletException System.out.println ("- En MyFilter -"); HttpServletRequest coincide con la solicitud req (HttpServletRequest); myService.doSomething (req); .DoFilter ciclo (solicitud, respuesta); - Aplastar destruir públicamente permanentemente ()
Clase de configuración de Java
@EnableWebMvc@Construcción@ComponenteScanclase pública MyWebConfig
Guardar DelegatingFilterProxy
Recomendado: Fortect
¿Estás cansado de que tu computadora funcione lentamente? ¿Está plagado de virus y malware? ¡No temas, amigo mío, porque Fortect está aquí para salvar el día! Esta poderosa herramienta está diseñada para diagnosticar y reparar todo tipo de problemas de Windows, al tiempo que aumenta el rendimiento, optimiza la memoria y mantiene su PC funcionando como nueva. Así que no esperes más: ¡descarga Fortect hoy mismo!
AppInitializer de clase pública alargada AbstractAnnotationConfigDispatcherServletInitializer ............. en Crush filtro protegido [] getServletFilters () DelegatingFilterProxy filterProxy = nuevo DelegatingFilterProxy (); filterProxy.setTargetBeanName ("myTestFilter"); filtro [] repetir filtro de proxies; .............
Controlador
Salir
V
- MyFilter--En MyService: / aplicación- Manejo de la solicitud en el operador -
Proyecto de muestra
- spring-webmvc 4.3.9.RELEASE: Spring Web MVC.
- Spring-Test 4.3.9.RELEASE: Spring TestContext Framework.
- javax.servlet- api 3.1.0 Java Servlet API.
- junit 4.12: JUnit es una plataforma de pruebas Java creada por Erich Gamma y Kent Beck.
- JDK 1.8
- Maven 3.3.9
Spring Inject Bean Into Servlet Filter
Lente Injecteer Boon In Servletfilter
Wiosna Wstrzyknac Fasole Do Filtra Serwletowego
서블릿 필터에 스프링 인젝트 빈
Primavera Injetar Feijao No Filtro Servlet
Spring Vvodit Bean Komponent V Filtr Servleta
Fruhlingsinjektionsbohnen In Servlet Filter
Fjaderinjicera Bonan I Servletfiltret
Le Ressort Injecte Le Haricot Dans Le Filtre De Servlet
La Molla Inietta Il Fagiolo Nel Filtro Servlet