Программный доступ к bean-компонентам в конкретном контексте портлета - PullRequest
1 голос
/ 23 марта 2010

У меня есть приложение с портлетами. Он настраивается с помощью контейнера IoC Spring Framework. Я использую org.springframework.web.context.ContextLoaderListener для загрузки моего контекста.

У меня есть контекст приложения на корневом уровне (applicationContext.xml) и специфичный для портлета контекст (MyPortlet-portlet.xml).

У меня есть портлет типа org.springframework.web.portlet.DispatcherPortlet, который подключен к контроллеру. В контроллере я хочу получить доступ к одному из компонентов (например, компоненту с идентификатором "myBean"), который я определил в своем конкретном контексте портлета. Я пытался

MyBean mybean = (MyBean)PortletApplicationContextUtils.getWebApplicationContext(
    getPortletContext()).getBean("myBean")

Однако здесь доступны только bean-компоненты в моем контексте приложения - ни один из моих bean-компонентов в моем специфичном для портлета контексте недоступен.

Есть ли способ получить доступ к bean-компонентам в контексте моего портлета?

Спасибо

1 Ответ

1 голос
/ 23 марта 2010

Во-первых, вы не можете просто подключить bean-компонент к контроллеру обычным способом, вместо того, чтобы извлекать его программно?

В противном случае вы должны понимать, что getWebApplicationContext() получает ссылку на корневой контекст веб-приложения, а не на контекст приложения сервлета:

Найти корневой WebApplicationContext для этого приложения с портлетами, которое обычно загружается через ContextLoaderListener или ContextLoaderServlet.

Если вашему контроллеру требуется дескриптор в своем собственном контексте, он должен реализовать ApplicationContextAware или BeanFactoryAware, или он может использовать @Autowired ApplicationContext, если вы хотите использовать автопроводку.

...