ここで説明したように、ユーザーのログイン情報を保存し、それを他の管理対象 Bean に正常に注入するための @SessionScoped ApplicationBean があります。
私も @ManagedProperty アノテーションで Dao インターフェイスを使っていますが、使い方に違和感があります。
public メソッド listStocks(String companyCode) を持つ StockDao があり、ユーザーのログイン時に companyCode が ApplicationBean に格納されているとします。
したがって、マネージド Bean はこのように DAO レイヤーを呼び出しています
@ManagedProperty(value = "#{appBean}")
ApplicationBean appBean;
public void getStockList() {
return stockDao.listStocks(appBean.getCompanyCode());
}
これは、SQL が companyCode を必要とするすべての場所で繰り返されます。
私のDAOレイヤーがcompanyCodeを知っていれば(つまり、DAOにApplicationBeanを注入することを意味します)、以下のような方法を使用する方が良いと思います
public void getStockList() {
return stockDao.listStocks();
}
問題は、どの API 設計が優れているかということです。2 番目に投票した場合、どのように @SessionScoped Bean を DAO レイヤーに挿入できますか?