2

我正在编写一个将用于不同应用程序(2 层和 3 层)的模块。我需要连接到数据库。因此,当与 2 层应用程序一起使用时,我使该模块需要一个 java.sql.Connection 对象作为参数。那里没有问题。

我面临的问题是,在 3 层应用程序的情况下,模块将从表示层使用,因此,我不想为模块提供连接对象以进行数据库访问。

你建议我用什么来解决这个问题?

4

2 回答 2

1

在 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") 并获得一个使用所有依赖项初始化的持久性管理器的实例。您可以针对不同的部署选项使用不同的应用程序上下文。

于 2009-09-08T20:01:08.037 回答
0

您将 Connection 传递给持久性对象的本能是好的,因为您不愿意让表示层负责获取它。

我建议阅读 MVC 模式并研究 Spring。Spring 成语将向您展示分层应用程序的正确方法。它也将有助于解决您的依赖问题。

更新:

您将不得不阅读有关 Spring 的更多信息。

使用 Spring 的 web->service->persistence 接口分层的常见习语将有助于正确分层您的应用程序。

Spring 具有依赖注入来帮助您管理依赖项。

Spring 的框架类帮助您获取和管理诸如数据库连接之类的东西。

我认为重写别人已经写得更好的东西对你来说毫无意义。我建议您从一步一步浏览 Spring MVC开始,看看您是否同意。

如果您不想学习 Spring,我建议您至少看看他们为 DataSource 和 JDBC 连接编写的类。也许您可以通过查看他们的方式来改进您的工作方式。

于 2009-09-08T09:18:25.883 回答