zoukankan      html  css  js  c++  java
  • 编写BeanFactory

    /**
     * 一个创建Bean对象的工厂
     *
     * Bean:在计算机英语中,有可重用组件的含义。
     * JavaBean:用java语言编写的可重用组件。
     *      javabean >  实体类
     *
     *   它就是创建我们的service和dao对象的。
     *
     *   第一个:需要一个配置文件来配置我们的service和dao
     *           配置的内容:唯一标识=全限定类名(key=value)
     *   第二个:通过读取配置文件中配置的内容,反射创建对象
     *
     *   配置文件可以是xml也可以是properties
     */
    public  class  BeanFactory{
        //定义一个properties对象
        private static Properties properties;
        //定义一个Map,用于存放我们要创建的对象, 我们把它称之为容器, 创建一个存起来,这样创建的对象就成为了单实例对象
        private static Map<String,Object> beans;
    
        /**
         * 首先,static{}(静态代码块)在程序加载中static是先于构造方法加载的,并且只会加载一次。
         * 两外static块中只能使用static修饰的属性。
         * 程序中的static{}块只是为了加载properties文件信息,这个加载只会被加载一次。
         */
        //使用静态代码块为properties赋值
        static {
            try {
                //实例化对象
                //            properties  = new Properties ();
                //            //获取properties文件的流对象
                //InputStream inputStream=new FileInputStream ();//不能使用此方式,文件具体路径可能并不确定
                InputStream inputStream=BeanFactory.class.getClassLoader ().getResourceAsStream ("bean.properties");
                properties.load (inputStream);
                //实例化容器
                beans=new HashMap<String,Object> ();
                //取出配置文件中所有的Key
                //Enumeration keys=properties.keys ();
                Set keys=  properties.keySet ();
                //遍历
                for (Object obj: keys) {
                    //获取key
                    String key=(String)obj;
                    //根据key获取value
                    String beanPath=properties.getProperty (key);
                    try {
                        //反射创建对象
                        Object value=Class.forName (beanPath).newInstance ();
                        //把key和value存入容器之中
                        beans.put (key,value);
                    } catch (Exception e) {
                        e.printStackTrace ();
                    }
                }
            } catch (IOException e) {
               throw  new ExceptionInInitializerError ("初始化失败!");
            }
    
        }
    
        /**
         * 在getBean时实例化一个对象,每次调用getBean时都会实例化一个新的对象,多实例
         * 多例对象被创建多次,执行效率不如单例对象
         * @param beanName
         * @return
         */
        public static Object getBean(String beanName){
            //Object bean=null;
            //try {
            //    //beanPath : com.itheima.service.impl.AccountServiceImpl
            //    String beanPath=properties.getProperty (beanName);
            //    /**
            //     * Class.forName (beanPath).newInstance ();
            //     * newInstance () 每次都会调用默认构造函数创建对象
            //     */
            //    bean=Class.forName (beanPath).newInstance ();
            //} catch (Exception e) {
            //    e.printStackTrace ();
            //}
            //return  bean;
            return beans.get (beanName);
        }
    }
  • 相关阅读:
    Create Ubuntu DEB package from a Qt application
    Packaging a Qt application
    Ubuntu下安装Eclipse+QT我尽量让它详细点
    Mosh: the mobile shell
    PySide: Python for Qt 1.0发布 编程语言 ITeye资讯
    ubuntu用qt creator写的程序编译后生成的可执行文件复制到另一个系统中需要哪些文件才能运行
    Qt4小技巧——QTextEdit自动滚屏
    网站地图制作工具 Sitemap Creator 2.1
    Dependency Walker (depends.exe) Home Page
    秀一个PySide做的软件,网站地图制作工具 (Sitemap Creator)
  • 原文地址:https://www.cnblogs.com/mkl7/p/10676845.html
Copyright © 2011-2022 走看看