怎样的SSH2架构下创建单例,这个单例我要实现下拉框内容(存放与数据库)的缓存,包括spring如何配置。

解决方案 »

  1.   

    不知道你说的单例是否是单例模式
    反正我就告诉你spring的bean默认就是单例bean
      

  2.   

    我说的不是spring的bean属性,用spring的bean属性不方便,因为我可能所有的java类都有可能访问这个单例,如果用spring注入,需要为所有用到的java都注入这个单例,我想在任何地方都可以使用:单例.instance.getPara()实现参数获取
      

  3.   

    单例的代码哈再给你段代码你看看
    public class A {
    private static A a;
    private A(){
    }public A getInstance(){
       if(a == null)
            a = new A();
       return a;
    }
    }
      

  4.   

    用ssh框架如何实现呢?spring如何配置?
      

  5.   

    单例的创建我也会,主要是不知道如何将它放到ssh框架了,通过spring配置实现,在配置这个单例是我还需要将baseDao注入进去,但是在getInstance时,访问baseDao的方法报错,说baseDao还没有注入
      

  6.   

    还是贴代码吧
    public class ParaManager 
    {
    BaseDAO dao;
    public BaseDAO getDao() {
    return dao;
    } public void setDao(BaseDAO dao) {
    this.dao = dao;
    } private static ParaManager instance = null;
    List<TCfgPara> paraList;
    Map<String,String> paraMap;

    @SuppressWarnings("unchecked")
    private ParaManager(){
    paraList = dao.query("from TCfgPara");//28行,报错的地方
    paraMap = new HashMap();
    for(TCfgPara curPara:paraList){
    paraMap.put(curPara.getCode(), curPara.getValue());
    }
    }

    @SuppressWarnings("unchecked")
    public String getPara(String code){

    return paraMap.get(code);
    }

    public static ParaManager getInstance(){
    if(instance == null){
    instance = new ParaManager();
    }
    return instance;
    }
    }<bean id="paraManager" class="com.bc.common.util.ParaManager"
    scope="singleton">
    <property name="dao" ref="dao" />
    </bean>tomcat启动时报错
    Caused by: java.lang.NullPointerException
    at com.bc.common.util.ParaManager.<init>(ParaManager.java:28)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:96)
      

  7.   

    public class Singleton{
     private Singleton(){};
     private static Singleton instance = new Singleton();
     public static Singleton getinstance(){
      return instance();
     }
    }
      

  8.   

    你在xml配置文件配置了BaseDAO吗? <bean id="dao" class="com.XXX.BaseDAO"
    abstract="false" lazy-init="default" autowire="default"
    dependency-check="default">
    <property name="sessionFactory">
    <ref bean="sessionFactory"></ref>
    </property>
    </bean>
      

  9.   

    public class BooksContext {
               //这个地方是关键
     private static ApplicationContext content=new ClassPathXmlApplicationContext("applicationContext.xml");; public static void getnewsTypeById(HttpServletRequest request) {
    SimpleDateFormat  sdf=new SimpleDateFormat("yyyy年MM月dd日hh点mm分"); 
    Date date=new Date(); 
    String d=sdf.format(date); 
    System.out.println(d);
                     //这个地方是关键
    BookService b = (BookService) content.getBean(
    "BookServiceImpl");
    List<BooksLordType> list = b.getAllBooksLordType();
    request.setAttribute("BooksLordTypeList", list);
    }
      

  10.   

    我来把问题总结了,象这样的缓冲我选择不放入spring管理,因为如果放入bean管理,在tomcat启动时,spring会去初始化单例bean,但这是BaseDAO还没有注入进去,所以会报错。
    现在解决办法:在单例中构造方法中,通过SpringContextUtil获取BaseDAO,在查询出缓冲数据,放入HashMap