• Spring--2.Spring之IOC--IOC容器的22个实验(1)


     实验1.IOC容器创建对象,并为属性赋值


    Hello World:(通过各种方式给容器中注册对象(注册会员))

    以前是自己new对象,现在所有对象交给容器创建;给容器中注册组件

    以后框架编写流程:

    1.导包

      核心容器
      spring-beans-4.0.0.RELEASE.jar
      spring-context-4.0.0.RELEASE.jar
      spring-core-4.0.0.RELEASE.jar
      spring-expression-4.0.0.RELEASE.jar
      commons-logging-1.1.1.jar
      Spring运行的时候依赖一个日志包,没有会报错

    2.写配置

      Spring的配置文件中,集合了Spring的IOC容器管理的所有组件(会员清单);

      创建一个Spring Bean Configuration File(Spring的bean配置文件);

    3.测试

    new ClassPathXmlApplicationContext("ioc.xml");  ioc容器的配置文件在类路径下

    new FileSystemXmlApplicationContext("D://ioc.cml"); ioc容器的配置文件在磁盘路径下

    实验2.根据bean的类型从IOC容器中获取bean的实例


    1.导包:与实验1一致

    2.写配置:与实验1一致

    3.测试:

     

    实验3.通过构造器为bean的属性赋值(index,type属性介绍)、通过P名称空间为bean的属性赋值


    1.导包:与实验1一致

    2.写配置:

    3.测试:

     

    实验4.正确的为各种属性赋值


    测试使用null值、引用类型赋值(引用其他bean、引用内部bean)、集合类型赋值(List、Map、Properties)、util名称空间创建集合类型的bean、级联属性赋值

     

     

    没有任何输出

     

     

     

     级联属性可以修改属性的属性,注意:原来的bean的值可能会被修改

    测试:

        //ApplicationContext代表ioc容器
        //当前应用的xml配置文件在ClassPath下
        //根据Spring的配置文件得到ioc容器对象
    //    private ApplicationContext ioc=new ClassPathXmlApplicationContext("ioc.xml");
        private ApplicationContext ioc=new ClassPathXmlApplicationContext("ioc2.xml");
        
        /**
         * 实验4.正确的为各种属性赋值
                测试使用null值:默认引用类型就是null;基本类型是默认值
                引用类型赋值(引用其他bean、引用内部bean)、
                集合类型赋值(List、Map、Properties)、
                util名称空间创建集合类型的bean、
                级联属性赋值
         *
         */
        @Test
        public void test04() {
    //        Person bean=(Person)ioc.getBean("person01");
    //        System.out.println("-------测试:测试使用null值-----------");
    //        System.out.println(bean.getLastName()==null);
    //        System.out.println("------------------------------");
    //        
    //        System.out.println();
    //        System.out.println("-------测试:引用类型赋值:引用其他bean-----------");
    //        System.out.println("person的car:"+bean.getCar());
    //        Car bean2 = (Car)ioc.getBean("car01");
    //        bean2.setCarName("haha");
    //        System.out.println("修改了容器中的car,person的car:"+bean.getCar());
    //        Car car = bean.getCar();
    //        System.out.println(car==bean2);
    //        System.out.println("------------------------------");
            
    //        System.out.println();
    //        System.out.println("-------测试:引用类型赋值:引用内部bean-----------");
    //        System.out.println("person的car:"+bean.getCar());
    //        System.out.println("------------------------------");
            
    //        Person bean2=(Person)ioc.getBean("person02");
    //        System.out.println();
    //        System.out.println("-------测试:集合类型赋值 List-----------");
    //        List<Book> books = bean2.getBooks();
    //        System.out.println(books);
    //        System.out.println("------------------------------");
            
            /**
             * 内部bean不能用id获取
             * org.springframework.beans.factory.NoSuchBeanDefinitionException:
             *  No bean named 'carInner' is defined
             */
    //        Object bean=ioc.getBean("carInner");
    //        System.out.println(bean);
            
            
    //        Person bean2=(Person)ioc.getBean("person02");
    //        System.out.println();
    //        System.out.println("-------测试:集合类型赋值 Map-----------");
    //        Map<String, Object> maps = bean2.getMaps();
    //        System.out.println(maps);
    //        System.out.println("------------------------------");
            
    //        Person bean2=(Person)ioc.getBean("person02");
    //        System.out.println();
    //        System.out.println("-------测试:集合类型赋值 Properties-----------");
    //        Properties properties = bean2.getProperties();
    //        System.out.println(properties);
    //        System.out.println("------------------------------");
            
    //        Person bean3=(Person)ioc.getBean("person03");
    //        System.out.println();
    //        System.out.println("-------测试:util名称空间创建集合类型的bean-----------");
    //        Map<String, Object> maps = bean3.getMaps();
    //        System.out.println(maps);
    //        System.out.println("------------------------------");
    //        Map<String,Object> map = (Map<String,Object>)ioc.getBean("myMaps");
    //        System.out.println(map.getClass());
            
    //        级联属性可以修改属性的属性,注意:原来的bean的值可能会被修改
            System.out.println("-------测试:级联属性赋值-----------");
            Person bean4=(Person)ioc.getBean("person04");
            Object car = ioc.getBean("car01");
            System.out.println("容器中的car:"+car);
            System.out.println("Person中的car:"+bean4.getCar());
        }

    实验5.配置通过静态工厂方法创建的bean、实例工厂方法创建的bean、FactoryBean


    1.导包:与实验1一致

    2.写配置:

    工厂类及工厂方法:

     

     

    3.测试:

     

    实验6.通过继承实现bean配置信息的重用


    1.导包:与实验1一致

    2.写配置:

     3.测试

     

    实验7.通过abstract属性创建一个模板bean


    1.导包:与实验1一致

    2.写配置:

    在实验6的基础上修改:

     3.测试:

    在实验6的基础上修改:

    不能获取5的实例,它只能用来被被人继承,所以测试抛异常。

    实验8.bean之间的依赖


    1.导包:与实验1一致

    2.写配置:

     3.测试:

     

    注意:depends-on表示在创建该实例时,先创建配置的实例;depends-on配置的顺序先后也会改变创建先后。

    实验9.测试bean的作用域,分别创建单实例和多实例的bean


    1.导包:与实验1一致

    2.写配置及3.测试:

    单实例(默认):

     

    多实例:

     

  • 相关阅读:
    【百度搜索研发部】以求医为例谈搜索引擎排序算法的基础原理(转)
    TF-IDF与余弦相似性的应用(三):自动摘要
    TF-IDF与余弦相似性的应用(一):自动提取关键词
    TF-IDF与余弦相似性的应用(二):找出相似文章
    技术向:一文读懂卷积神经网络CNN(转)
    [透析] 卷积神经网络CNN究竟是怎样一步一步工作的?(转)
    像素间的基本关系-距离(转)
    Swift学习笔记-字符串和字符(Strings and Characters)-比较字符串 (Comparing Strings)
    Swift学习笔记-基本运算符(Basic Operators)-空合运算符(Nil Coalescing Operator)
    Swift学习笔记-基本运算符(Basic Operators)-求余运算符
  • 原文地址:https://www.cnblogs.com/maintest/p/12176699.html
Copyright © 2020-2023  润新知