Where/when DAOImplementation 实例应该是 located/created?
Where/when should the DAOImplementation instances be located/created?
我正在开发一个带有 DAO 层的 JAX-RS 项目。我不确定要遵循哪种架构。
例如,假设我们有一个 ProductDAOImpl
class 实现了 ProductDAO
接口,还有一个 ProductRS
class 作为入口点产品 REST 服务。
问题一
ProductDAO
(实际上是ProductDAOImpl
)实例应该在哪里创建?
选项:
A) 在 ProductRS
class 的每个方法中需要访问产品?
B) 作为 ProductRS
class?
的成员
(此选项会引入数据竞争吗?不确定容器如何处理 REST 服务 classes - 可能与下面的问题 2 有关。)
问题二
我应该为 JAX-RS classes 使用注释,例如 @Stateless
?
问题三
在具有 DAO 层和可能的服务层的 JAX-RS 应用程序中,体系结构和 class 关系的最佳实践是什么?
(非常欢迎任何学习该主题的链接。)
问题4
DAO 实现 classes 是否应该提供静态方法? (如图所示 )
实施具体细节
将 JAX-RS 的 Jersey 实现与 Glassfish 服务器和具有 JDBC 访问数据源的 DAO 层一起使用。
问题 1 的答案:创建 'ProductDAO' 实例作为 'ProductRS' class 的成员,您可以在所有实例中使用相同的实例方法。
Q2 的答案:您可以对 JAX-RS classes 使用注释,如果您的功能要求是无状态行为,那么您可以使用 '@无国籍'。仅当您的 REST 服务需要 JavaEE 安全时才需要“@Stateless”。
问题 1
我不会明确地创建实例。通常依赖注入就是出于这个原因——在你的 ProductRS class.
中注入 ProductDAO 接口
问题 2 - 3
一些与您的技术堆栈相关(尽管不完全)的示例。
球衣 + Spring 示例:
https://www.mkyong.com/webservices/jax-rs/jersey-spring-integration-example/
球衣 + Guice 示例:
http://www.nailedtothex.org/roller/kyle/entry/lean-example-of-tomcat-82
Guice + Hibernate 示例:
http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice/
泽西岛 + 休眠 + Spring 示例:
http://www.benchresources.net/jersey-2-x-web-service-integrating-with-spring-and-hibernate-orm-framework-using-annotation/
问题4
提供的 link ()
中没有静态方法
更新
由于测试困难,建议避免使用 DAO 中的静态方法。相关讨论:
- Using Static methods or none static methods in Dao Class?
- How to design a DAO class?
- DAO pattern - use Static or non Static methods?
我正在开发一个带有 DAO 层的 JAX-RS 项目。我不确定要遵循哪种架构。
例如,假设我们有一个 ProductDAOImpl
class 实现了 ProductDAO
接口,还有一个 ProductRS
class 作为入口点产品 REST 服务。
问题一
ProductDAO
(实际上是ProductDAOImpl
)实例应该在哪里创建?
选项:
A) 在 ProductRS
class 的每个方法中需要访问产品?
B) 作为 ProductRS
class?
的成员
(此选项会引入数据竞争吗?不确定容器如何处理 REST 服务 classes - 可能与下面的问题 2 有关。)
问题二
我应该为 JAX-RS classes 使用注释,例如 @Stateless
?
问题三
在具有 DAO 层和可能的服务层的 JAX-RS 应用程序中,体系结构和 class 关系的最佳实践是什么?
(非常欢迎任何学习该主题的链接。)
问题4
DAO 实现 classes 是否应该提供静态方法? (如图所示
实施具体细节
将 JAX-RS 的 Jersey 实现与 Glassfish 服务器和具有 JDBC 访问数据源的 DAO 层一起使用。
问题 1 的答案:创建 'ProductDAO' 实例作为 'ProductRS' class 的成员,您可以在所有实例中使用相同的实例方法。
Q2 的答案:您可以对 JAX-RS classes 使用注释,如果您的功能要求是无状态行为,那么您可以使用 '@无国籍'。仅当您的 REST 服务需要 JavaEE 安全时才需要“@Stateless”。
问题 1
我不会明确地创建实例。通常依赖注入就是出于这个原因——在你的 ProductRS class.
中注入 ProductDAO 接口问题 2 - 3
一些与您的技术堆栈相关(尽管不完全)的示例。
球衣 + Spring 示例: https://www.mkyong.com/webservices/jax-rs/jersey-spring-integration-example/
球衣 + Guice 示例: http://www.nailedtothex.org/roller/kyle/entry/lean-example-of-tomcat-82
Guice + Hibernate 示例: http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice/
泽西岛 + 休眠 + Spring 示例: http://www.benchresources.net/jersey-2-x-web-service-integrating-with-spring-and-hibernate-orm-framework-using-annotation/
问题4
提供的 link (
更新
由于测试困难,建议避免使用 DAO 中的静态方法。相关讨论:
- Using Static methods or none static methods in Dao Class?
- How to design a DAO class?
- DAO pattern - use Static or non Static methods?