12

DAO を管理プロパティとして挿入しようとしています。

public class UserInfoBean {

    private User user;

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

    public UserInfoBean() {
        this.user = dao.getUserByEmail("test@gmail.com");
    }

    // Getters and setters.
}

DAO オブジェクトは Bean の作成後に注入されますがnull、コンストラクター内にあるため、NullPointerException. 注入された管理プロパティを使用してマネージド Bean を初期化するにはどうすればよいですか?

4

1 に答える 1

23

注入は、建設前に適格な注入ターゲットがないという理由だけで、建設後にのみ行うことができます。次の架空の例を想像してください。

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.

構築と@PostConstruct依存性注入の直後にアクションを実行するには、 で注釈が付けられたメソッドを使用する必要があります(たとえば、Spring Bean、、、などによる) 。@ManagedProperty@EJB@Inject

@PostConstruct
public void init() {
    this.user = dao.getUserByEmail("test@gmail.com");
}
于 2012-04-17T18:39:43.147 に答える