如何在Spring中创建Service类对象

时间:2014-05-17 13:54:26

标签: java spring jsf

我在我的项目中使用 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类?

1 个答案:

答案 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我会使用后一种方法而不是前者。

更多信息: