将CDI对话界面标记为瞬态是否安全?

时间:2018-07-17 11:03:55

标签: java serialization cdi conversation-scope

您可以将@ConversationScoped Bean中的对话接口安全地标记为瞬态(即CDI是否在序列化过程中对其进行处理)还是我需要自定义的read / writeObject?

@ConversationScoped
    public class CDIConversationScopedBean implements Serializable {
        private static final long serialVersionUID = 1L;
        @Inject
        private transient Conversation conversation; // <<-- transient ok?

FindBugs抱怨一个非瞬态的不可序列化实例字段。

1 个答案:

答案 0 :(得分:0)

TL; DR:是的,这很安全。说明:

由于$firstname = 'Dave'; $middlename = 'Brexit'; $lastname = 'Davis'; $fullname = $firstname . ' ' . $middlename . ' ' . $lastname; // 'Dave Brexit Davis' 类也未实现mapStateToProps configuration接口,因此静态分析器通常会抱怨所有字段必须为Serializable或瞬态,即使该类从未明确序列化或反序列化。

首先,您的代码段有点可疑,为什么要实现此标记接口-那么您打算序列化此类吗?您可能要添加生成的或默认的“串行版本” UID。

要解决此问题,如果您不打算对类进行反序列化,请在字段Conversation中进行设置-这是无害的,并且不会影响transient的行为。参见Java 8规范Serializable

  

可以将变量标记为瞬态,以表明它们不是对象持久状态的一部分。

如果您计划,请Conversation实现chapter 8.3.1.3并以相同的方式对待其字段。