初学Java模式,参考他人的脚本写了个安全的单例模式的数据库连接DAO
package com.jobbole;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
/* 使用nested class 来实现安全的单例模式 */
public class SecuritySingleton {
/*Initialization on Demand Holder. 这种方法使用内部类来做到延迟加载对象,在初始化这个内部类的时候,
* JLS(Java Language Sepcification)会保证这个类的线程安全。这种写法完全使用了Java虚拟机的机制进行同步保证,
* 没有一个同步的关键字。
**/
private static final String className = "";
private static final String url = "";
private static final String user = "";
private static final String password = "";
// 通过静态代码块注册数据库驱动,保证注册只执行一次
static{
try {
Class.forName(className); // 注册驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private SecuritySingleton(){}
public static SecuritySingleton getInstance(){
return SingletonHolder.instance;
}
public Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
private static class SingletonHolder{
public static final SecuritySingleton instance = new SecuritySingleton();
}
}