zoukankan      html  css  js  c++  java
  • 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.测试:

    单实例(默认):

     

    多实例:

     

  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/maintest/p/12176699.html
Copyright © 2011-2022 走看看