Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何在CDIBean中调用服务类接口_Spring_Jsf_Cdi - Fatal编程技术网

Spring 如何在CDIBean中调用服务类接口

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

我们计划将托管bean更改为CDIBeans。我们使用下面的代码来调用托管Bean中的服务类

@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
注入CDIBean
LoginController

但是您的
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();
 }
}