在Spring中使用依赖注入来替换Factory模式

时间:2011-03-14 17:55:59

标签: java hibernate spring dependency-injection factory-pattern

我目前正在开发一个应用程序,其中域对象D的实例被注入到应用程序中。域对象可以包含许多类,它们由bean定义的不同组合和排列,因此导致许多不同的最终对象D,我将其称为D的不同版本。对于给定版本的D,我必须填写其中的原始值然后将其保存到数据库中。使用JPA和Hibernate将它保存到数据库非常简单。问题是填写D中的值。使用SNMP通过网络获取值,然后填充。对于D的每个版本,遵循不同的策略,因为D的每个版本可以具有不同的MIB。我目前正在遵循工厂模式。工厂采用D版本并返回特定于该版本D的valueRetriever,然后用于获取值并填充D.

另一个显而易见的方法是使用D注入配置检索器,然后使用它来检索配置。但是我还需要在运行时使用检索器重新获取配置,这样就有必要将检索器也存储在数据库中,从而为每个检索器创建一个新表,这似乎是当前的开销。

我的问题是:是否有更好的方法来检索配置,即使用依赖注入给定上述场景的valueRetriever。

编辑:AOP可以在这里使用吗?

2 个答案:

答案 0 :(得分:2)

您需要创建的某些对象似乎具有复杂的创建逻辑。您可能不会查看Spring FactoryBean接口,因为FactoryBean可以通过网络获取所有复杂的详细信息,同时允许您创建实例然后将其注入其他bean。

答案 1 :(得分:0)

Spring的DI 的基础是 Bean Factory / Application Context,因此完全可以替换你正在做的事情。

不同之处在于您必须能够将所有排列放入Spring配置中并控制应用程序上下文。如果你不能这样做,也许首选你的解决方案。

更新:我会开始担心你的Spring解决方案会在太多不熟悉的技术中加入可能过于复杂的情况。

深吸一口气,思考“简单”。

我现在不担心数据库。如果您可以获得bean工厂所需的所有组合,Spring应用程序上下文将是数据库。我假设这些配置是只读的,一旦声明它们就不会改变。如果不是这样的话,所有的赌注都会被取消。