我有以下CDI豆:鈍化CDI的SessionBean與構造器注入
@SessionScoped
public class ReportService implements Serializable {
private static final long serialVersionUID = 1L;
private MyDao myDao;
@Inject
public ReportService(MyDao myDao) {
this.myDao = myDao;
}
}
@RequestScoped
public class MyDao extends AbstractDao<Order> {
protected MyDao() {
}
@Inject
public MyDao(EntityManager em) {
super(em);
}
}
如果我開始我的web應用(Tomcat的與焊接)以下異常被拋出:
WELD-001435:正常作用域bean類 com.myorg.ReportService不是proxyable因爲它 沒有無參數的構造函數 - Managed Bean的[類 com.myorg.ReportService]與預選賽[@Any @default。
怎麼可能使用構造函數注入在SessionScoped豆? 僅僅添加一個package-visible無參數構造函數是否安全?
我已經搜索了很多,但是我沒有找到任何關於鈍化使用構造函數注入的CDI Bean的信息。
MyDao是公開課嗎?它有沒有參數的構造函數? –
Weld抱怨無參數構造函數,因爲它想要代理bean。這與鈍化無關。 CDI/EJB負責鈍化bean,然後將其恢復到完整的功能狀態。激活不必再使用構造函數構造對象(我認爲)。 **底線:我相信可以在你的bean類中添加一個包私有的默認構造函數。** –
編輯我的文章:添加MyDao代碼 MyDao是一個@RequestScoped CDI Bean。如果我在那裏刪除受保護的構造函數,那麼拋出相同的焊接錯誤。 WELD-001435:正常範圍的bean類com.myorg.MyDao不可代理,因爲它沒有無參數構造函數 - 具有限定符[@Any @Default]的受管Bean [類com.myorg.MyDao]。 – shoutcool