如何在 CDI bean 中调用 Service Class 接口
How to invoke Service Class Interface in CDI bean
我们计划将托管 Bean 更改为 CDI Bean。我们使用以下代码在托管 Bean 中调用服务 class。
@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 中调用服务接口?
阅读 BalusC 在 Spring JSF integration: how to inject a Spring component/service in JSF managed bean? 上的回答告诉我应该支持将您的 Spring bean userService
注入到您的 CDI bean LoginController
中。
但是您的 UserServiceImpl
不是 Serializable
,这在 CDI 上下文中意味着它不具有 钝化能力。
这也是您的异常告诉的内容。
所以要么让你的 LoginController @RequestScoped
而不是 @SessionScoped
所以它本身和 @Inject
ed children 不需要钝化能力(又名 Serializable
).
或者让你的 UserServiceImpl
和 DAO 实现 Serializable
(哪个恕我直言有点奇怪?)。
我们计划将托管 Bean 更改为 CDI Bean。我们使用以下代码在托管 Bean 中调用服务 class。
@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 中调用服务接口?
阅读 BalusC 在 Spring JSF integration: how to inject a Spring component/service in JSF managed bean? 上的回答告诉我应该支持将您的 Spring bean userService
注入到您的 CDI bean LoginController
中。
但是您的 UserServiceImpl
不是 Serializable
,这在 CDI 上下文中意味着它不具有 钝化能力。
这也是您的异常告诉的内容。
所以要么让你的 LoginController @RequestScoped
而不是 @SessionScoped
所以它本身和 @Inject
ed children 不需要钝化能力(又名 Serializable
).
或者让你的 UserServiceImpl
和 DAO 实现 Serializable
(哪个恕我直言有点奇怪?)。