2014-01-23 17 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处看到的特殊语法;是一个枚举常量的声明。这将用于创建可以在代码中引用的枚举类的实例。

相关问题