我有一个@SessionScoped ApplicationBean,用于存储用户登录信息并将其成功注入(inject)其他托管bean,如here所示。
我也通过 @ManagedProperty 注释使用我的 Dao 接口(interface),但我觉得我的用法有问题。
假设有一个StockDao,它有一个公共(public)方法listStocks(String companyCode),并且当用户登录时companyCode存储在ApplicationBean中。
所以我的托管 bean 像这样调用 DAO 层
@ManagedProperty(value = "#{appBean}")
ApplicationBean appBean;
public void getStockList() {
return stockDao.listStocks(appBean.getCompanyCode());
}
这会在 sql 需要 companyCode 的所有地方重复。
我觉得如果我的 DAO 层知道 companyCode(这意味着将 ApplicationBean 注入(inject)到 DAO 中)会更好,并且我应该使用如下方法
public void getStockList() {
return stockDao.listStocks();
}
所以问题是,哪种 API 设计更好,如果您投票支持第二个,我如何将 @SessionScoped beans 注入(inject) DAO 层?
最佳答案
对我来说,第一种方法更干净, 我不想将 DAO 层与 session 管理 bean 绑定(bind)在一起。
我将一般工件(尤其是 daos 和数据模型)打包为单独的 Jar ,没有任何外部依赖项 这样我就可以在不做任何修改的情况下使用它,无论是 Web 应用程序、独立应用程序还是 EJB
这使您的 Dao 独立于获取公司代码的方式/位置
关于java - 如何在DAO层使用 session 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14725987/