【发布时间】:2020-02-13 15:15:59
【问题描述】:
我们计划将托管 Bean 更改为 CDI bean。我们使用下面的代码来调用托管 Bean 中的 Service 类。
@ManagedProperty("#{userService}")
private UserService userService; and setter method
对于CDI bean,我用@inject 替换了@ManagedProperty,如下所示,它抛出了以下异常。
@SessionScoped
@Named
public class LoginController implements Serializable {
@Inject
private UserService userService;
}
org.apache.webbeans.exception.WebBeansDeploymentException: Passivation capable beans must satisfy passivation capable dependencies.
UserService 是一个带有未实现方法的普通接口,而 UserServiceImpl 实现了 UserService 接口。请看下面:
public interface UserService {
public List<User> getUserList();
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
public List<User> getUserList() {
return userDao.getUserList();
}
}
请告诉我如何在 CDI bean 中调用服务接口?
【问题讨论】:
-
UserService 是带有 @Named 注释的 CDI-Bean 吗?而且您没有使用跟踪添加完整的异常。
-
@selaron : UserService 是一个带有未实现方法的普通接口,而 UserServiceImpl 实现了 UserService 接口。
-
编辑帖子以包含详细信息是完全正确的。这仍然不是完整的异常堆栈跟踪,但比以前更好。
-
谁在管理 userService bean?如果它应该是 CDI bean,则 UserServiceImpl 应该被注释为 @Named(和适当的范围)。和/或它必须是可序列化的,因为您的 LoginController 是 SessionScopend,因此需要是可序列化的,而且所有字段都需要是可序列化的。
-
看起来这是一个 SpringFramework bean