我正在编写一个将用于不同应用程序(2 层和 3 层)的模块。我需要连接到数据库。因此,当与 2 层应用程序一起使用时,我使该模块需要一个 java.sql.Connection 对象作为参数。那里没有问题。
我面临的问题是,在 3 层应用程序的情况下,模块将从表示层使用,因此,我不想为模块提供连接对象以进行数据库访问。
你建议我用什么来解决这个问题?
在 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开始,看看您是否同意。
如果您不想学习 Spring,我建议您至少看看他们为 DataSource 和 JDBC 连接编写的类。也许您可以通过查看他们的方式来改进您的工作方式。