![](/img/trans.png)
[英]How can I use Spring XML configuration to set a bean property with list of all beans of a certain type?
[英]How to set ServletContext property for a bean in Spring XML metadata configuration
我嘗試在這里搜索,但我找不到解決方案。 我有一些XML元數據,如下所示。
<bean class="javax.servlet.ServletContext" id="servletContext" />
<bean class="com.abc.ProductController">
<property name="servletContext" ref="servletContext"/>
</bean>
使用此配置,我得到一個例外,說"javax.servlet.ServletContext"
是一個接口,它無法使用id servletContext
創建一個bean。 ProductController類在某個jar中,我無法修改,但我希望它在我的應用程序中作為bean。 它具有自動裝配的ServletContext屬性。
如果需要在XML config spring應用程序中為ServletContext
創建bean,可以使用實現ServletContextAware
的BeanFactory<ServletContext>
public class ServletContextFactory implements FactoryBean<ServletContext>,
ServletContextAware{
private ServletContext servletContext;
@Override
public ServletContext getObject() throws Exception {
return servletContext;
}
@Override
public Class<?> getObjectType() {
return ServletContext.class;
}
@Override
public boolean isSingleton() {
return true;
}
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
然后你可以聲明:
<bean class="org.app.ServletContextFactory" id="servletContext" />
<bean class="com.abc.ProductController">
<property name="servletContext" ref="servletContext"/>
</bean>
只需在控制器中自動連接上下文:
@Autowired
private ServletContext context;
您不能像這樣在XML中引用servlet上下文,因為它的生命周期由servlet容器控制。
解決方案是讓com.abc.ProductController
實現ServletContextAware然后Spring會為你設置它。
使用java配置使用上面由Serge Ballesta創建的ServletContextFactory和:
@Configuration
public class WebAppConfiguration {
@Autowired
private ServletContextFactory servletContextFactory;
@Bean
public ServletContextFactory servletContextFactory() {
return new ServletContextFactory();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.