我对使用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中时).
原文链接:https://www.f2er.com/spring/531861.html但是解决方案是在春季进行的.您必须使用作用域代理.
要将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代理无法正常工作,因为在反序列化期间该接口不可用…我不完全理解为什么,但是至少我有可行的解决方案.