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?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |