春季-JSF bean和可序列化问题

前端之家收集整理的这篇文章主要介绍了春季-JSF bean和可序列化问题 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我对使用Spring托管服务的JSF Bean有问题.我收到一个错误消息,说JSF bean中使用的spring bean无法序列化.

@ManagedProperty("#{customerService}")
private CustomerService customerService;

我无法使该服务可序列化,因为它使用的是JdbcTemplate,而该JdbcTemplate本身是不可序列化的.而且,对具有应用程序范围的Spring bean进行序列化根本没有任何意义,所以我不明白为什么有人的代码试图对其进行序列化.

我已经使用Spring服务与JSF项目一起工作,并且没有此类问题,因此这种合作必不可少.但是,该项目是基于示例项目从头开始构建的,因此spring-JSF合作的配置肯定有问题,但是我不知道在哪里搜索.

Spring for JSF的配置为:

<!-- JSF and Spring are integrated -->
<application>
    <el-resolver>
        org.springframework.web.jsf.el.SpringBeanFacesELResolver
    </el-resolver>
</application>

如何解决这个问题?

最佳答案
无法避免JSF序列化错误.甚至ApplicationScoped Bean也被序列化(当它们注入到其他Bean中时).

但是解决方案是在春季进行的.您必须使用作用域代理.

要将bean包装到可序列化代理中,您必须添加到bean主体中:

<aop:scoped-proxy proxy-target-class="true"/>

必须添加spring aop命名空间和spring-aop依赖项.

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

就是这样!在bean中将是可序列化元素,该代理将在反序列化时从Spring上下文重新加载bean.

这里唯一的迷惑是我必须创建cglib class-level-proxy. JRE代理无法正常工作,因为在反序列化期间该接口不可用…我不完全理解为什么,但是至少我有可行的解决方案.

猜你在找的Spring相关文章