java中單例模式是一種常見的設計模式,單例模式的寫法有好幾種,懶漢式單例、餓漢式單例、登記式單例。
單例模式有以下特點:
1、單例類隻能有一個執行個體。
2、單例類必須自己建立自己的唯一執行個體。
3、單例類必須給所有其他對象提供這一執行個體。
單例模式確定某個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。在計算機系統中,線程池、緩存、日志對象、對話框、列印機、顯示卡的驅動程式對象常被設計成單例。這些應用都或多或少具有資料總管的功能。每台計算機可以有若幹個列印機,但隻能有一個Printer Spooler,以避免兩個列印作業同時輸出到列印機中。每台計算機可以有若幹通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。總之,選擇單例模式就是為了避免不一緻狀态,避免政出多頭。
建立sessionFactory
package com.hlg.whd.controller;
import org.springframework.context.annotation.Configuration;
public class HibernateUtils {
//聲明一個私有的靜态final類型的Configuration
private static final Configuration config;
//聲明一個私有的靜态final類型的SessionFactory對象
private static final SessionFactory factory;
//通過靜态代碼塊建構SessionFactory
static{
config=new Configuration().configure();
factory=config.buildSessionFactroy();
}
//提供一個公有的靜态方法供外部擷取,并傳回一個Session對象
public static Session getSession(){
return factory;
}
}
上述代碼聲明了一個私有的final類型的Configuration對象和SessionFactory對象,供類中的成員使用,通過靜态方法建構SessionFactory執行個體,最後提供了一個公有的靜态方法供外部擷取session對象。
測試類
public class test {
@Test
public void selectStu(){
Session session = HibernateUtils.getSession();
Transaction t = session.beginTransaction();
Costmer s = (Costmer) session.get(Costmer.class,1);
System.out.println(s.toString());
t.commit;
}
}
實體類
package com.hlg.whd;
public class Costmer {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Costmer [id=" + id + ", username=" + username + ", password="
+ password + "]";
}
}