Eine Einfache Möglichkeit, Ein Möglicherweise Beladenes Injektorkorn In Einem Echten Servlet-Filter Zu Sichern
November 29, 2021Es lohnt sich, diese Reparaturmethoden zu lesen, wenn Sie den Spring Inject Bean-Fehlercode in den Servlet-Filtern auf Ihrem Computer haben.
Empfohlen: Fortect
Um eine klare Vorstellung davon zu geben, wie Chili Peppers in verschiedenen Kontexten betrachtet werden können
Im Frühjahr scheint es nur zwei Arten von Kontexten zu geben
1. Root (Kontext des von ContextLoaderListener heruntergeladenen Kontexts)
2. Servlet (von DispatcherServlet vollgestopfter Kontext)
In RootContext definierte Beans im ServletContext sichtbar? – JA
Komponenten, die in einer Art gesamtem Root-Kontext definiert sind, werden standardmäßig immer unter Verwendung aller Servlet-Kontexte erkannt. Auf die im Cheer-Kontext definierte Fähigkeit für die dataSource-Kaffeebohne kann hier in Ihrem Servlet-Kontext wie unten angegeben zugegriffen werden.
@configurationöffentliche .class .RootConfiguration ... ... ... ... @ Bohne :. ... .bürgerlich .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Konstruktion@ActiverWebMvc@ComponentScan (basePackages ist gleich "com.pvn.mvctiles")WebMvcConfigurer Servlet-Konfigurationstools der öffentlichen Klasse @Autowired interne Datenquelle DataSource; ...
Beans, die in Bezug auf ServletContext definiert sind, sind im RootContext sichtbar, zum Beispiel Ja 7 .
applicationContext.getBeanDefinitionNames ();
2.Wenn Ihre Familie aus dem Kontext des bestimmten Servlets in einer Kollation oder dem anderen Servlet-Label auf Trockenbohnen zugreifen möchte, fügen Sie das Basisrabattpaket "org.springframework.web.servlet"
zum Haupt- Modul. Konfiguration / xml
@configuration@ComponentScan (basePackages = "org.springframework.web.servlet")Öffentliche Klassen RootConfiguration
Nach dem Hinzufügen finden Sie jede der unten aufgeführten Komponenten aus den meisten Paketkontexten
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, localeResolver
, requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Wenn Sie möchten, dass Sie Ihre eigenen Kakaobohnen als letztes rootContext erhalten, fügen Sie ein Basiselement hinzu, das es wert ist, die RootContext-Komponenten zu analysieren, während unten beschrieben wird.
@configuration@ComponentScan (basePackages ist gleich "com.your.configuration.package", "org.springframework.web.servlet")RootConfiguration Public College-Klasse
Die obige Konfiguration ist wichtig, wenn Sie möchten, dass die enthaltene Obsession in Ihrem RootContext und auch in Ihrem Hot-Servlet-Filter verfügbar ist. Wenn Ihre gesamte Familie beispielsweise eine Ausnahme findet und die äußerst fehlerhafte Antwort senden möchte, obwohl die Antwort von HttpMessageConverter
gesendet wurde, aber in servletContext auf diese Weise konfiguriert wurde, möchten Clients möglicherweise eine solche verwenden Composite-Konverter, um eine bereitgestellte Antwort zu senden …
@Autowiredprivater ApplicationContext appContext;
ApplicationContext Autowiring sollte man den Job nicht im Servlet abtrennen, da die Filter scheinbar initialisiert wurden bevor das Spring Reservoir initialisiert wurde. (Je nach Status Ihres Filters auch DelegatingProxyFilter)
öffentliche Klasse YourFilter Instrumentenfilter privater ApplicationContext appContext; @ Zerkleinern manifest void init (FilterConfig filterConfig) wirft ServletException Filter.super.init (filterConfig); appContext entspricht WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
Ich hoffe, im Allgemeinen ist eine klare Technik zum Bereitstellen von Beans zwischen Kontexten verfügbar.
(Warum in 4. Ja)
1. Initialisieren der Reihenfolge der Umstände – rootCo firstntext und und servletContext.Beim Initialisieren von rootContext i. H. verfügbar die root / xml-Perspektive-Konfigurationsklasse, wenn Sie jemals versuchen, veg in Ihrem servletContext zu definieren, wird nach NULL gesucht. (da zweifelsohne der servletContext noch nicht initialisiert ist, was bedeutet, dass die a Tasse Kaffee Komponenten während der Initialisierung im rootContext nicht sichtbar / geschützt sind)
Aber jeder kann hier Beans definieren, während er sich im servletContext nach der servletContext-Initialisierung befindet (Sie können Beans möglicherweise über den Anwendungskontext abrufen)
Verwenden Sie
WebApplicationContextUtils
:öffentliche Initialisierung vermeiden (FilterConfig cfg) ApplicationContext ctx entspricht WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean steht für ctx.getBean (YourBeanType.class);
Mit
DelegatingFilterProxy
ordnen Sie Ihrer Filterdeklaration während des Beans zu, wer filtern kann. Der delegierende Proxy ruft dann einfach alle Beans auf, die das InterfaceFilter
ausführen.Verwenden Sie
@Configurable
für Ihren Abschnitt. Ich würde jedoch beide Optionen bevorzugen, die am typischsten mit den anderen beiden Optionen verbunden sind. (Diese Sorte verwendet das Aspect J-Gewebe)
Bean
UsersConnectionRepository bedeutet (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Wobei usersConnectionRepository
im Allgemeinen der Name / die ID ihrer Bean für den Anwendungskontext ist. Oder besser:
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
public init vermeiden (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this);
Dann @injizieren Sie nur Bohnen aus Ihrem Bauchbereich in diesen Filter, die eine Möglichkeit wie für alle anderen Bohnen, die Sie wahrscheinlich injizieren würden.
@InjectPrivates Repository UsersConnectionRepository;
DelegatingFilterProxy wird definitiv als Proxy verwendet, um einen generischen Servlet-Filter zu erstellen.
Der DelegatingFilterProxy selbst ist auch der Servlet-Filter, der an einzelne angegebene Spring Managed Bean delegiert, die eine Art Filterschnittstelle verwendet.
Wir brauchen einen Platz zur Unterstützung der Eigenschaft targetBeanName DelegatingFilterProxy, um manchmal der Name des Zielgemüses (der Bohne, die die Reinigungsschnittstelle implementiert) zu sein.
Beispiel
Pflanzliche Implementierung von Servlet-Filtern
@Component ("myTestFilter")Der MyFilter-Populationskurs implementiert Filter @Autowired MyService myService privat; @ Zerkleinern Offizielle Rollback-Initialisierung (FilterConfig filterConfig) führt insgesamt zu ServletException @ Zerkleinern public nullify doFilter (ServletRequest, ServletResponse, Filterkette) wirft IOException, ServletException System.out.println ("- In MyFilter -"); HttpServletRequest bekämpft Anforderungsanforderung (HttpServletRequest); myService.doSomething (erforderlich); .DoFilter-String (Anfrage, Antwort); @ Zerkleinern öffentlich unnötig zerstören ()
Java-Konfigurationsklasse
@EnableWebMvc@Konstruktion@ComponentScanöffentliche Klasse MyWebConfig
DelegatingFilterProxy speichern
Empfohlen: Fortect
Sind Sie es leid, dass Ihr Computer langsam läuft? Ist es voller Viren und Malware? Fürchte dich nicht, mein Freund, denn Fortect ist hier, um den Tag zu retten! Dieses leistungsstarke Tool wurde entwickelt, um alle Arten von Windows-Problemen zu diagnostizieren und zu reparieren, während es gleichzeitig die Leistung steigert, den Arbeitsspeicher optimiert und dafür sorgt, dass Ihr PC wie neu läuft. Warten Sie also nicht länger - laden Sie Fortect noch heute herunter!
erweiterte Kundenklasse AppInitializer AbstractAnnotationConfigDispatcherServletInitializer ............. @ Zerkleinern geschützter Filter [] getServletFilters () DelegatingFilterProxy filterProxy = new DelegatingFilterProxy (); filterProxy.setTargetBeanName ("myTestFilter"); new purify [] Proxy-Filter wiederholen; .............
Steuerung
Beenden
V
- MyFilter--In MyService: / app- Handhabung der Applikationen in der Steuerung -
Beispielprojekt
- 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 ist im Allgemeinen ein Java-Test-Framework, das einfach von Erich Gamma und Kent Beck erstellt wurde.
- 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 Inyectar Frijol En El Filtro De Servlet
Primavera Injetar Feijao No Filtro Servlet
Spring Vvodit Bean Komponent V Filtr Servleta
Fjaderinjicera Bonan I Servletfiltret
Le Ressort Injecte Le Haricot Dans Le Filtre De Servlet
La Molla Inietta Il Fagiolo Nel Filtro Servlet