2014-01-23 20 views
1

我是Java的Hibernate框架的新手。 我有一個HibernateUtil類的代碼,我不明白INSTANCE來自哪裏。 它持有的HibernateUtil類的情況下,如何?什麼是HibernateUtil中的INSTANCE?

的代碼是這樣的......

import java.util.Properties; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.service.ServiceRegistryBuilder; 

public enum HibernateUtil { 

INSTANCE; // what about this??? 
public static SessionFactory sessionFactory = null; 

private synchronized SessionFactory initialiseSessionFactory() { 

    if (sessionFactory == null) { 
     Configuration config = new Configuration(); 

     config.addAnnotatedClass(demo1.class); 
     config.addAnnotatedClass(demo2.class); 
     config.configure(); 

     //get the properties from Hibernate configuration file 
     Properties configProperties = config.getProperties(); 
     ServiceRegistryBuilder serviceRegisteryBuilder = new ServiceRegistryBuilder(); 
     ServiceRegistry serviceRegistry = serviceRegisteryBuilder.applySettings(configProperties).buildServiceRegistry(); 
     sessionFactory = config.buildSessionFactory(serviceRegistry); 

    } 
    return sessionFactory; 
} 

public Session getSession() { 
    Session hibernateSession = null; 

    if (sessionFactory == null) { 
     hibernateSession = initialiseSessionFactory().openSession(); 

    } else { 
     hibernateSession = sessionFactory.openSession(); 
      } 
    return hibernateSession; 
} 
} 

回答

2

的HibernateUtil正在實施Singleton模式:只能有一個類的實例,該實例是HibernateUtil.INSTANCE。

+0

但是沒有'INSTANSE = new HibernateUtil();',那麼它從哪裏來,爲什麼HibernateUtil是「枚舉」? –

+0

它隱含地完成:這是一個枚舉類型 –

+0

你給我一個鏈接,我可以從這裏理解這件事......關於枚舉。 –

0

Java中的enum實際上是一個類。一個隱含地延伸java.lang.Enum。您在INSTANCE處看到的特殊語法;是一個枚舉常量的聲明。這將用於創建可以在代碼中引用的枚舉類的實例。

相關問題