我在我的项目中使用 ehcache ,所以当几个表的服务器启动数据将被加载到缓存中..在我的应用程序中我使用的是Spring,Hibernate,JSF 我在 applicationCOntext.xml 文件
中使用此配置<bean id="cacheManager" class="com.ccc.service.cache.CacheManager" init-method="init">
<property name="delay" value="${timer.delay}" />
</bean>
<bean id="companyCache" class="com.ccc.service.cache.clients.ValidCacheClient"/>
<context:component-scan base-package="com.ccc.spring" />
<context:annotation-config />
<context:spring-configured />
在Jsf Managed Bean中,我正在创建像这样的服务类
@ManagedProperty(value = "#{GlobalDataService}")
static GlobalDataService globalDataService;
但是在 ValidCacheClient.java 中如何创建Service类的对象? ValidCacheClient.java 不是一个manged类,那么如何创建Object of Service类?
答案 0 :(得分:2)
您有两种选择:
从JSF中将必要的bean注释为ServletContext
属性,因此这些bean将被JSF视为应用程序作用域属性。您可以使用Spring ServletContextAttributeExporter
:
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<entry key="globalDataService" value-ref="GlobalDataService" />
</map>
</property>
</bean>
然后你可以在JSF中没有问题地注入它:
@ManagedProperty(value = "#{globalDataService}")
GlobalDataService globalDataService; //no need to be static
让Spring容器管理JSF托管bean的lyfecycle。使用此方法,您可以使用@Autowired
注入弹簧bean。这在Spring 3 + JSF 2教程中有所介绍。但请注意,如果执行此操作,您将无法访问JSF 2视图范围(在同一视图中处理ajax请求时至关重要),因为Spring still cannot support it。但这可以通过为视图范围创建自定义实现来解决,例如Cagatay's
IMO我会使用后一种方法而不是前者。
更多信息: