Простой способ сохранить определенное подпружиненное зерно инжектора в хорошем фильтре сервлета
November 28, 2021Стоит изучить эти методы исправления, если вы действительно получаете ошибку Spring Inject Bean в фильтрах сервлетов на вашей невероятной машине.
Рекомендуется: Fortect
Чтобы дать четкое представление о том, как перец чили можно рассматривать в разных контекстах
Весной за контекстами стоят только два типа
1. Корень (контекст перспективы, загруженной ContextLoaderListener)
2. Сервлет (контекст загружен из DispatcherServlet)
Компоненты, определенные в RootContext, Видны ли в ServletContext? – ДА
Компоненты, определенные с использованием всего корневого контекста, должны быть видны по умолчанию с использованием всего контекста сервлета. Возможности для всего bean-объекта dataSource, определенного в ситуации Cheer, могут быть доступны здесь, как правило, в контексте сервлета, как указано ниже.
@configurationобщедоступный .class .RootConfiguration ... ... ... ... @ Бин :. ... .public .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Строительство@ActiverWebMvc@ComponentScan (basePackages означает «com.pvn.mvctiles»)Инструменты компоновки сервлетов открытого класса WebMvcConfigurer @Autowired частный источник данных DataSource; ...
Компоненты, определенные в терминах ServletContext, видны в RootContext, например, да *
applicationContext.getBeanDefinitionNames ();
2. Если вы хотите получить доступ к сухим bean-компонентам из контекста основного сервлета в сопоставлении или ряда других меток сервлета, добавьте базовую сделку "org.springframework.web.servlet"
в наиболее ценный класс. Конфигурация / xml
@configuration@ComponentScan (basePackages = "org.springframework.web.servlet")Публичные классы RootConfiguration
После добавления вы встретите все компоненты, перечисленные ниже в контексте пакета
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, <код > localeResolver , requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Если вы хотите получить свои собственные бобовые какао-бобы в rootContext, добавьте пакет канала, который стоит проанализировать соединения RootContext, как описано ниже.
@configuration@ComponentScan (basePackages = "com.your.configuration.package", "org.springframework.web.servlet")Класс публичного колледжа RootConfiguration
Приведенная выше конфигурация действительно полезна, если вы хотите, чтобы наша собственная встроенная одержимость была доступна в личном RootContext, а также была доступна в собственном новом фильтре сервлетов. Например, если вы обнаружите исключение в надежном фильтре и хотите отправить наш собственный ответ об ошибке, даже если точный ответ был отправлен из HttpMessageConverter
, но настроен таким образом в пределах только servletContext, клиенты могут захотеть использовать этот составной конвертер для отправки огромного общего ответа …
@Autowiredчастный ApplicationContext appContext;
ApplicationContext Autowiring не обязательно выполнять работу в фильтре сервлета, поскольку фильтры, похоже, гарантируют, что вы были инициализированы до инициализации контейнера Spring. (В зависимости от порядка вашего фильтра, также DelegatingProxyFilter)
открытый класс YourFilter использует фильтры частный ApplicationContext appContext; @ Раздавить манифест бесполезной инициализации (FilterConfig filterConfig) выдает исключение ServletException Filter.super.init (filterConfig); appContext = WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
Я мечтаю, что существует четкая техника, позволяющая сделать bean-компоненты доступными между контекстами.
(Почему внутри * Да)
1. Инициализация порядка обстоятельств – сначала rootCo, а затем servletContext.При инициализации rootContext i. H. вокруг класса конфигурации структуры root / xml, если вы когда-нибудь оцените определение veg в своем ценном servletContext, он будет искать NULL. (поскольку servletContext еще каким-то образом не инициализирован, поэтому мы можем сказать, что тип компонентов эспрессо не отображается для каждого сохраненного в rootContext через инициализацию)
Но вы можете определить beans для этой статьи в servletContext после инициализации servletContext (вы должны получить beans через контекст плана)
Используйте
WebApplicationContextUtils
:избегать публичной инициализации (FilterConfig cfg) ApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean означает ctx.getBean (YourBeanType.class);
С помощью
DelegatingFilterProxy
вы сопоставляете, кто может вас защитить, с объявлением фильтра во время овоща. Затем делегирующий прокси просто вызывает по телефону все компоненты, которые запускают интерфейсFilter
.Используйте
@Configurable
для своего индивидуального блока. Однако я бы предпочел просто из двух других вариантов. (В этой разновидности используется плетение Aspect J)
Бин
UsersConnectionRepository указывает (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Где usersConnectionRepository
– это обычно, вероятно, имя / идентификатор вашего bean-компонента для значения приложения. Или лучше:
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
инициализация открытого пробела (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (это);
Затем @inject только ваши основные компоненты ядра в этот фильтр, наша возможность такая же, как и для любых других bean-компонентов, которые вы, вероятно, внедрили бы.
@InjectПриватный репозиторий UsersConnectionRepository;
DelegatingFilterProxy можно использовать в качестве прокси для общего фильтра сервлетов.
Сам DelegatingFilterProxy, возможно, является фильтром сервлета, который делегирует, чтобы помочь вам, один указанный управляемый bean-компонент Spring, в котором он реализует своего рода фильтрующее соединение.
Нам нужен магазин для свойства targetBeanName DelegatingFilterProxy, которое может быть именем объектного bean-компонента (bean-компонента, реализующего наиболее важный интерфейс фильтрации).
Пример
Vegetable, реализующий фильтры сервлетов
@Component ("myTestFilter")Публичный курс MyFilter реализует фильтры @Autowired MyService myService private; @ Раздавить Официальный рейтинг инициализации отката (FilterConfig filterConfig) в ServletException @ Раздавить правительство void doFilter (ServletRequest, ServletResponse, Цепочка фильтров) выбрасывает IOException, ServletException System.out.println ("- В MyFilter -"); HttpServletRequest удовлетворяет запрос req (HttpServletRequest); myService.doSomething (req); .DoFilter строка (запрос, ответ); в раздавливании публично уничтожить, которого можно избежать ()
Класс конфигурации Java
@EnableWebMvc@Строительство@ComponentScanоткрытый класс MyWebConfig
Сохранить DelegatingFilterProxy
Рекомендуется: Fortect
Вы устали от медленной работы компьютера? Он пронизан вирусами и вредоносными программами? Не бойся, друг мой, Fortect здесь, чтобы спасти положение! Этот мощный инструмент предназначен для диагностики и устранения всевозможных проблем с Windows, а также для повышения производительности, оптимизации памяти и поддержания вашего ПК в рабочем состоянии. Так что не ждите больше - скачайте Fortect сегодня!
а>
продленный открытый класс AppInitializer AbstractAnnotationConfigDispatcherServletInitializer ............. @ Раздавить защищенный фильтр [] getServletFilters () DelegatingFilterProxy filterProxy = новый DelegatingFilterProxy (); filterProxy.setTargetBeanName ("myTestFilter"); инновационный фильтр [] повторный прокси-фильтр; .............
Контроллер
Выйти
V
- MyFilter--В MyService: / app- Обработка большей части запросов в контроллере -
Пример проекта
- 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 – это среда тестирования Java, разработанная Эрихом Гаммой и Кентом Беком.
- 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
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
г.