加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – CDI构造函数注入不适用于瞬态非可序列化依赖项

发布时间:2020-12-15 02:30:40 所属栏目:Java 来源:网络整理
导读:我很喜欢CDI的构造函数注入,但现在我找到了一个用例,其中构造函数注入显然不能按预期工作. 在我的例子中,我有两个类.类“BeanA”没有定义明确的范围,也没有实现Serializable.类“BeanB”使用@SessionScoped进行注释,并实现Serializable. public class BeanA{
我很喜欢CDI的构造函数注入,但现在我找到了一个用例,其中构造函数注入显然不能按预期工作.

在我的例子中,我有两个类.类“BeanA”没有定义明确的范围,也没有实现Serializable.类“BeanB”使用@SessionScoped进行注释,并实现Serializable.

public class BeanA{
}

@SessionScoped
public class BeanB implements Serializable{
    @Inject
    private BeanA beanA;
}

当我尝试将BeanA的实例注入到bean的BeanB中时,我从Weld获得了UnserializableDependencyException,因为BeanA不可序列化.这是预期的行为.

当我用“瞬态”标记“beanA”字段时,注入工作没有问题:

@Inject
private transient BeanA beanA;

现在Weld不会抛出任何异常.

这对我来说非常好,但是当我喜欢使用构造函数注入时,我的理解问题就出现了.当我执行以下操作时,它不再起作用:

@SessionScoped
public class BeanB implements Serializable{
    private transient BeanA beanA;

    @Inject
    public BeanB(BeanA beanA){
        this.beanA = beanA;
    }

    public BeanB(){}
}

使用此代码,我再次获得UnserializableDependencyException.我认为构造函数注入和场注入或多或少相等,但显然它们不是.我的错是什么?

解决方法

这似乎是一个错误.如果你使BeanA可序列化,一切都运行良好吗?您还使用哪个版本的Weld?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读