java - 如何在DAO层使用 session 变量?

标签 java spring jsf-2

我有一个@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/

相关文章:

java - 为什么Java 8 'Collector' 类是这样设计的?

java - SvnOperationFactory获取svn "add"操作的方法

java - Spring AMQP 多用户

java - Spring Boot with websphere 8.5.5 - UOWManager 事务处理失败

jsf - 来自 bean 的 Primefaces 对话框只显示一次

java - Maven:如何将我的外部 jar 包含到构建可执行 jar 中

java - spring 构造型注释是否有类似的预构造?

jsf - 如何将 h :selectOneMenu 中的字符串转换为整数

jsf-2 - 如何在 JSF 中刷新 selectOneMenu 选择页面?

java - 如何使用文件中的自定义停止词/常用词在 Lucene 中创建自定义分析器