我正在编写一个将用于不同应用程序(2层和3层)的模块。 我需要连接到数据库。因此,当使用2层应用程序时,我使模块需要java.sql.Connection对象作为参数。那里没问题。
我面临的问题是,在3层应用程序的情况下,该模块将从Presentation层使用,因此,我不想为模块提供用于DB访问的Connection对象。
你建议我用什么来解决这个问题?
答案 0 :(得分:1)
在Spring中,您定义了一个应用程序上下文,在大多数情况下,它只是一个XML文件,并且包含许多名为beans的应用程序对象。
<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”),就可以获得一个初始化所有依赖项的持久性管理器实例。您可以针对不同的部署选项使用不同的应用程序上下文。
答案 1 :(得分:0)
您将连接传递给持久性对象的直觉是一个很好的,因为您不愿意让表示层负责获取它。
我建议阅读关于MVC模式并研究Spring。 Spring成语将向您展示分层应用程序的正确方法。它也有助于你的依赖问题。
更新:
您必须阅读有关Spring的更多信息。
使用Spring的常用成语web-&gt; service-&gt;持久性界面分层将有助于正确分层您的应用。
Spring有依赖注入来帮助您管理依赖项。
Spring的框架类可以帮助您获取和管理数据库连接等内容。
我认为你重写别人已经写得更好的东西是没有意义的。我建议您先浏览Spring MVC Step By Step,看看是否同意。
如果您不想学习Spring,我建议您至少查看他们为DataSource和JDBC连接编写的类。也许你可以通过观察他们来改善你的方式。