程序設(shè)計:關(guān)于private構(gòu)造函數(shù)

字號:

看下面的類:
    HibernateSessionFactory.java
    package zy.pro.wd.util;
    import net.sf.hibernate.HibernateException;
    import net.sf.hibernate.Session;
    import net.sf.hibernate.cfg.Configuration;
    public class HibernateSessionFactory {
    /**
    * Location of hibernate.cfg.xml file.
    * NOTICE: Location should be on the classpath as Hibernate uses
    * #resourceAsStream style lookup for its configuration file. That
    * is place the config file in a Java package - the default location
    * is the default Java package.
    * Examples:
    * CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
    * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".
    */
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    /** Holds a single instance of Session */
    private static final ThreadLocal threadLocal = new ThreadLocal();
    /** The single instance of hibernate configuration */
    private static final Configuration cfg = new Configuration();
    /** The single instance of hibernate SessionFactory */
    private static net.sf.hibernate.SessionFactory sessionFactory;
    /**
    * Returns the ThreadLocal Session instance. Lazy initialize
    * the SessionFactory if needed.
    *
    * @return Session
    * @throws HibernateException
    */
    public static Session currentSession() throws HibernateException {
    Session session = (Session) threadLocal.get();
    if (session == null) {
    if (sessionFactory == null) {
    try {
    cfg.configure(CONFIG_FILE_LOCATION);
    sessionFactory = cfg.buildSessionFactory();
    }
    catch (Exception e) {
    System.err.println("%%%% Error Creating SessionFactory %%%%");
    e.printStackTrace();
    }
    }
    session = sessionFactory.openSession();
    threadLocal.set(session);
    }
    return session;
    }
    /**
    * Close the single hibernate session instance.
    *
    * @throws HibernateException
    */
    public static void closeSession() throws HibernateException {
    Session session = (Session) threadLocal.get();
    threadLocal.set(null);
    if (session != null) {
    session.close();
    }
    }
    /**
    * Default constructor.
    */  private HibernateSessionFactory() {
    }
    }
    在這個類中,用到了私有構(gòu)造函數(shù),如粗體部分.
    我的調(diào)用類:
    package zy.pro.td.plugin;
    /*
    * Created on Oct 4, 2004
    *
    * To change the template for this generated file go to
    * Window>Preferences>Java>Code Generation>Code and Comments
    */
    import javax.servlet.ServletException;
    import org.apache.struts.action.ActionServlet;
    import org.apache.struts.action.PlugIn;
    import org.apache.struts.config.ModuleConfig;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import zy.pro.td.util.HibernateSessionFactory;
    /**
    * @author examda
    *
    *This class will initialize hibernate and bind SessionFactory in JNDI at the
    *time of application and startup and unbind it from JNDI at the time of application
    * shutdown
    */
    public class HibernatePlugin
    implements PlugIn {
    private static final String jndi_hibernate = "jndi_hibernate_factory";
    private  HibernateSessionFactory hsf;
    private String name;
    public HibernatePlugin() {
    hsf=new HibernateSessionFactory();
    }
    // This method will be called at the time of application shutdown
    public void destroy() {
    System.out.println("Entering HibernatePlugIn.destroy()");
    //Put hibernate cleanup code here
    System.out.println("Exiting HibernatePlugIn.destroy()");
    }
    //This method will be called at the time of application startup
    public void init(ActionServlet actionServlet, ModuleConfig config) throws
    ServletException {
    System.out.println("Entering HibernatePlugIn.init()");
    System.out.println("Value of init parameter " + getName());
    //Uncomment next two lines if you want to throw UnavailableException from your servlet
    //if(true)
    //throw new ServletException("Error configuring HibernatePlugIn");
    System.out.println("Exiting HibernatePlugIn.init()");
    }
    private void bindFactoryToJNDI() {
    try {
    Context ctx = new InitialContext();
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }
    public String getName() {
    return name;
    }
    public void setName(String string) {
    name = string;
    }
    }在調(diào)用類中,我創(chuàng)建了一個HibernateSessionFactory的對象,但是在初始化時,卻出了問題.總提示說:
    HibernateSessionFactory() has private access in zy.pro.td.util.HibernateSessionFactory at line 35(35:9)
    然后,我就將HibernateSessionFactory的構(gòu)造函數(shù)由private改成了public,調(diào)試通過.
    構(gòu)造函數(shù)為私有,就不能創(chuàng)建該類的對象.