【发布时间】:2012-05-23 23:47:15
【问题描述】:
我正在使用 Spring 和 JSF 2 创建一个 Web 应用程序。 业务对象保存在 Spring 容器中,我使用 @ManagedProperty 将它们注入托管 Bean,如下所示:
@ManagedBean
@ViewScoped
public class SomeMB implements Serializable {
private static final long serialVersionUID = 1L;
@Getter @Setter
@ManagedProperty("#{someService}")
private SomeService someService;
// ...
问题是,我不断收到来自 Spring (ServiceLocatorFactoryBean) 的类的 NotSerializableException,它正被 SomeService bean 使用。
如果我把它设为transient,我如何在反序列化后重新注入它?
或者,还有什么其他方法可以解决这个问题?
我一直在阅读其他几个类似的问题,但找不到任何与此问题完全相关的问题。
【问题讨论】:
-
仅供参考:如果您只使用 Java EE 自己的 EJB 而不是 Spring,则不存在此问题。
-
@BalusC 是的,我在其他问题中读到过,不幸的是我对 EJB 的了解还不够多,无法使用它(而且我不知道我是否可以说服同事让我在这个项目中试试)。顺便说一句,你能给我指出一个很好的资源来了解它吗?
-
这并不难。只需确保您的容器已经支持 EJB(Glassfish、JBoss、Weblogic 等)。使用
@Stateless或@Stateful注释服务类并通过@EJB注入它。而已。顺便说一句,不需要 getter/setter。 -
我们只使用 Tomcat 7。:/ 但是谢谢,我很快会在个人项目上尝试一下。
-
您可以在 Tomcat 7 上使用 OpenEJB 或将其替换为 TomEE:openejb.apache.org
标签: spring jsf-2 dependency-injection