我在 Groovy 中使用了JavaAWS
类(它使用的是Java AWS SDK),但现在我不知道如何在stage1和stage2中重用数据库连接。
基本上我想在任何地方使用相同的数据库连接,现在我不确定实现它的方法是什么。
我的ReplicateInstanceStatus
和ReplicateMetricStatistics
课程目前是空的,所以我还没有将它粘贴在那里。
public class JavaAWS {
Object database = null
public static void main(String[] args) {
def obj = new JavaAWS()
obj.run()
}
public JavaAWS() {
database = new MongoClient()
}
public void run() {
println "Running stage 1 ReplicateInstanceStatus"
def stage1 = new ReplicateInstanceStatus()
def ret1 = stage1.run()
println "Running stage 2 ReplicateMetricStatistics"
def stage2 = new ReplicateMetricStatistics()
def ret2 = stage2.run()
}
}
答案 0 :(得分:4)
这是一个明确要求依赖注入的情况。而不是你用来获得与舞台对象的连接的机制,这可能是某种环形全局,只需让它们将MongoClient
作为构造函数参数。
这也是单身模式看起来像坏主意的情况。如果有人想并行运行多个工作会怎么样?单例本质上是一个全局变量,只有自然只有一个表示的东西应该是单例;数据库连接不合适。
答案 1 :(得分:0)
似乎Singleton是解决方案而且" enum方式"是最简单的方法:
http://en.wikipedia.org/wiki/Singleton_pattern#The_enum_way
以下是成绩单:
枚举方式
在他的“Effective Java”一书的第二版中,Joshua Bloch声称单元素枚举类型是为任何支持枚举的Java实现单例" [8]的最佳方式。枚举的使用非常容易实现,并且没有关于可序列化对象的缺点,这些对象必须以其他方式规避。
public enum Singleton { INSTANCE; public void execute (String arg) { // Perform operation here } }
可以编写公共方法来获取任何所需类型的参数;这里使用单个String参数作为示例。
这种方法通过利用Java保证任何枚举值仅在Java程序中实例化一次来实现单例。由于Java枚举值是全局可访问的,因此单例也是如此,由类加载器懒惰地初始化。缺点是enum类型有点不灵活。