Spring 如何在CDIBean中调用服务类接口
我们计划将托管bean更改为CDIBeans。我们使用下面的代码来调用托管Bean中的服务类Spring 如何在CDIBean中调用服务类接口,spring,jsf,cdi,Spring,Jsf,Cdi,我们计划将托管bean更改为CDIBeans。我们使用下面的代码来调用托管Bean中的服务类 @ManagedProperty("#{userService}") private UserService userService; and setter method 对于CDIBean,我将@ManagedProperty替换为@inject,如下所示,它将引发以下异常 @SessionScoped @Named public class LoginController implements
@ManagedProperty("#{userService}")
private UserService userService; and setter method
对于CDIBean,我将@ManagedProperty替换为@inject,如下所示,它将引发以下异常
@SessionScoped
@Named
public class LoginController implements Serializable {
@Inject
private UserService userService;
}
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();
}
}
公共接口用户服务{
公共列表getUserList();
}
公共类UserServiceImpl实现UserService{
私有UserDao UserDao;
公共列表getUserList(){
返回userDao.getUserList();
}
}
请告诉我如何在CDIBeans中调用服务接口?阅读BalusC关于的回答告诉我应该支持将SpringBean
userService
注入CDIBeanLoginController
但是您的userserviceinpl
不可序列化
,这在CDI上下文中意味着它不具有钝化功能
这也是异常告诉您的
因此,让LoginController@requestscope
而不是@SessionScoped
使其本身和@Inject
ed子项不需要具有钝化功能(也称为可序列化的)。
或者使您的userserviceinpl
和DAO实现可序列化(哪个imho有点奇怪?)UserService是带有@Named注释的cdibean吗?您没有添加带有跟踪的完整异常。@selaron:UserService是一个普通接口,没有实现方法,UserServiceImpl实现UserService接口。编辑文章以包含详细信息是完全正确的。这仍然不是完整的异常堆栈跟踪,但比以前更好。谁在管理userService bean?如果它应该是一个CDIBean,那么UserServiceImpl应该被注释为@Named(以及适当的作用域)。和/或它必须是可序列化的,因为您的LoginController是SessionScopend,因此需要可序列化,并且所有字段都需要可序列化。看起来这是一个SpringFramework bean
public interface UserService {
public List<User> getUserList();
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
public List<User> getUserList() {
return userDao.getUserList();
}
}