【发布时间】:2010-11-26 10:42:22
【问题描述】:
我正在编写一个将用于不同应用程序(2 层和 3 层)的模块。 我需要连接到数据库。因此,当与 2 层应用程序一起使用时,我使该模块需要一个 java.sql.Connection 对象作为参数。那里没有问题。
我面临的问题是,在 3 层应用程序的情况下,模块将从表示层使用,因此,我不想为模块提供用于 DB 访问的 Connection 对象。
你建议我用什么来解决这个问题?
【问题讨论】:
我正在编写一个将用于不同应用程序(2 层和 3 层)的模块。 我需要连接到数据库。因此,当与 2 层应用程序一起使用时,我使该模块需要一个 java.sql.Connection 对象作为参数。那里没有问题。
我面临的问题是,在 3 层应用程序的情况下,模块将从表示层使用,因此,我不想为模块提供用于 DB 访问的 Connection 对象。
你建议我用什么来解决这个问题?
【问题讨论】:
在 Spring 中,您定义了一个应用程序上下文,它在大多数情况下只是一个 XML 文件,并且包含许多称为 bean 的应用程序对象。
<bean id="myDbConnection" scope="prototype" class="...">
...
</bean>
<bean id="myPersistanceManager" class="my.application.PersistanceManager">
<property name="connection" ref="myDbConnection" />
</bean>
myDbConnection 是在同一应用程序上下文中定义的 bean,它包含所有连接详细信息。
然后在您的表示层中,您只需使用 applicationContext.getBean("myPersistance") 并获得一个使用所有依赖项初始化的持久性管理器的实例。您可以针对不同的部署选项使用不同的应用程序上下文。
【讨论】:
您将 Connection 传递给持久性对象的本能是好的,因为您不愿意让表示层负责获取它。
我建议阅读 MVC 模式并研究 Spring。 Spring 成语将向您展示分层应用程序的正确方法。它也将有助于解决您的依赖问题。
更新:
您必须阅读有关 Spring 的更多信息。
使用 Spring 的 web->service->persistence 接口分层的常见习语将有助于正确分层您的应用程序。
Spring 有依赖注入来帮助你管理你的依赖。
Spring 的框架类可帮助您获取和管理数据库连接等内容。
我认为重写别人已经写得更好的东西对你来说毫无意义。我建议你先浏览Spring MVC Step By Step 看看你是否同意。
如果您不想学习 Spring,我建议您至少看看他们为 DataSource 和 JDBC 连接编写的类。也许您可以通过查看他们的方式来改进您的工作方式。
【讨论】: