У нас есть веб-приложение с корневым контекстом приложения (applicationContext.xml
) и диспетчерским сервлетом (dispatcher-servlet.xml
), определенным в нашем web.xml
следующим образом:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
...
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Из-за ограничений доступа мы, очевидно, не можем получить доступ ни к одному из bean-компонентов DispatcherServlet
из корневого родительского контекста.
Но мы хотели бы иметь возможность получить доступ к дочерним компонентам. Например, в нашем dispatcher-servlet.xml
у нас есть:
<bean id="firstController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
...
</bean>
<bean id="secondController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController">
...
</bean>
Как мы можем получить доступ к secondController
изнутри firstController
, не требуя, чтобы он передавался как аргумент-конструктор или устанавливался как свойство?
Мы используем WebApplicationContextUtils.getWebApplicationContext(...)
для доступа к братьям и сестрам в корне applicationContext.xml
, но мы хотели бы сделать то же самое в дочернем контексте. (Изнутри одного из детей.)
1 ответ
Вы можете получить объект ApplicationContext
, используя
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dispatcher-servlet.xml")
Предполагается, что dispatcher-servlet.xml
находится в пути к классам. объект контекста должен быть кэширован. Затем используйте context.getBean()
для доступа к bean-компонентам из любого места.
Другой вариант - использовать перегруженный метод, в котором мы можем передать имя атрибута контекста. Я этим не пользовался. WebApplicationContextUtils.getWebApplicationContext(ServletContext sc, String attrName)
@Autowired
и сохранил его как ivar, но в будущем я изучу экстрапараметрический getWebApplicationContext()
.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.