WELD-001410:注入点具有不可代理的依赖性

goo*_*oko 2 proxy jsf cdi

我有两个Managed Bean:

SessionBean:

@Named(value = "sessionBean")
@SessionScoped
public class SessionBean implements Serializable {

  private final Param param

  SessionBean(Param param) {
      this.param = param;
  }

}
Run Code Online (Sandbox Code Playgroud)

和TypesBean:

@Named(value = "typesBean")
@RequestScoped
public class TypesBean {

  @Inject
  private SessionBean session;

}
Run Code Online (Sandbox Code Playgroud)

该项目将生成,但不会部署:

部署期间发生错误:加载应用程序时发生异常:WELD-001410注入点[field] @Inject私有com.example.TypesBean.session具有不可代理的依赖关系。请参阅server.log以获取更多详细信息。

有什么问题?

mun*_*ngm 5

问题在于SessionBean类上缺少可访问的无参数构造函数。

OP指出的一种解决方案是:

“问题出在finalSessionBean的方法上。删除final 方法并将其公开化-解决问题。很抱歉浪费您的时间。”

或者...

@Named(value = "sessionBean")
@SessionScoped
public class SessionBean implements Serializable {

  . . . //variables, setters, getters and other methods
  private final Param param

  public SessionBean(Param param) {
      this.param = param;
  }
  // no-args constructor used by CDI for proxying only 
  // but is subsequently replaced with an instance 
  // created using the above constructor. 
  protected SessionBean() {
     this(null);
  }
Run Code Online (Sandbox Code Playgroud)

  • 或也将`Param`设为托管bean,并用`@ Inject`注释c'tor。另请参见例如https://docs.jboss.org/weld/reference/latest/zh-CN/html/injection.html#_injection_points (2认同)