10

DAOを管理プロパティとして挿入しようとしています。 Beanが作成された後管理対象Beanコンストラクターに注入された依存関係にアクセスすると、NullPointerExceptionが発生する

public class UserInfoBean { 

    private User user; 

    @ManagedProperty("#{userDAO}") 
    private UserDAO dao; 

    public UserInfoBean() { 
     this.user = dao.getUserByEmail("[email protected]"); 
    } 

    // Getters and setters. 
} 

DAOオブジェクトが注入され、それは、コンストラクタ、したがってNullPointerExceptionを引き起こすnullあります。注入された管理プロパティを使用してマネージドBeanを初期化するにはどうすればよいですか?

答えて

18

の施工後に注射が行われるのは、建設前に適格な注射対象がないからです。仮の例を次のように想像してみましょう。

UserInfoBean userInfoBean; 
UserDao userDao = new UserDao(); 
userInfoBean.setDao(userDao); // Injection takes place. 
userInfoBean = new UserInfoBean(); // Constructor invoked. 

これは技術的に単純ではありません。実際には次のように何が起こっているかである。

UserInfoBean userInfoBean; 
UserDao userDao = new UserDao(); 
userInfoBean = new UserInfoBean(); // Constructor invoked. 
userInfoBean.setDao(userDao); // Injection takes place. 
あなたが直接建設 依存性注入後(例えば、春豆、 @ManagedProperty@EJB@Inject、などによって)アクションを実行するために @PostConstructアノテーションを付けるメソッドを使用する必要があります

@PostConstruct 
public void init() { 
    this.user = dao.getUserByEmail("[email protected]"); 
} 
関連する問題