实验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.测试:

单实例(默认):

多实例:

Spring--2.Spring之IOC--IOC容器的23个实验(1)的更多相关文章

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

    Spring--2.Spring之IOC--IOC容器的23个实验(1) 中的所有实验我都是在同一个工程中进行的,从第十个实验开始,我将新建一个新的工程开始实验. 目前导包还是跟第一个项目一致,bea ...

  2. String框架搭建的基本步骤,及从 IOC & DI 容器中获取 Bean(spring框架bean的配置)--有实现数据库连接池的链接

    Spring框架的插件springsource-tool-suite-3.4.0.RELEASE-e4.3.1-updatesite(是一个压缩包)导入步骤: eclipse->help-> ...

  3. Spring学习(一):理解IoC容器

    序言 记得刚毕业那会儿,出来招工作被问到Spring的核心时,都觉得简单的一笔,直接说不就是IoC(控制反转)和DI(依赖注入)么,然后省略一万字对两个名词的解释.最近空来整理了一下Spring中Io ...

  4. 【spring源码分析】IOC容器初始化(总结)

    前言:在经过前面十二篇文章的分析,对bean的加载流程大致梳理清楚了.因为内容过多,因此需要进行一个小总结. 经过前面十二篇文章的漫长分析,终于将xml配置文件中的bean,转换成我们实际所需要的真正 ...

  5. 【spring源码分析】IOC容器初始化(二)

    前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...

  6. 【spring源码分析】IOC容器初始化(三)

    前言:在[spring源码分析]IOC容器初始化(二)中已经得到了XML配置文件的Document实例,下面分析bean的注册过程. XmlBeanDefinitionReader#registerB ...

  7. 【spring源码分析】IOC容器初始化(四)

    前言:在[spring源码分析]IOC容器初始化(三)中已经分析了BeanDefinition注册之前的一些准备工作,下面将进入BeanDefinition注册的核心流程. //DefaultBean ...

  8. 【spring源码分析】IOC容器初始化(七)

    前言:在[spring源码分析]IOC容器初始化(六)中分析了从单例缓存中加载bean对象,由于篇幅原因其核心函数 FactoryBeanRegistrySupport#getObjectFromFa ...

  9. 【spring源码分析】IOC容器初始化(十)

    前言:前文[spring源码分析]IOC容器初始化(九)中分析了AbstractAutowireCapableBeanFactory#createBeanInstance方法中通过工厂方法创建bean ...

随机推荐

  1. 如何查看linux中的ssh端口开启状态

    netstat -anp |grep 22 netstat -anp |grep sshlsof -i :22

  2. 关于 vue 生命周期 钩子函数 事件

    vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染->更新->渲染.卸载等一系列过程,我们称这是vue的生命周期. 通俗的将就是vue实例从创建到销毁 ...

  3. SpringBoot集成thymeleaf(自定义)模板中文乱码的解决办法

    楼主今天在学习SpringBoot集成thymelaf的时候报了中文乱码的错误,经过网上的搜索,现在得到解决的办法,分享给大家: package com.imooc.config; import or ...

  4. H3C 传递信息

  5. Educational Codeforces Round 54 (Rated for Div. 2) D Edge Deletion (SPFA + bfs)

    题目大意:给定你一个包含n个点m条边的无向图,现在最多在图中保留k条边,问怎么删除多的边,使得图中良好的节点数最多,求出保留在图中的边的数量和编号. 良好的节点定义为:删除某条边后该点到点1的最短距离 ...

  6. P1032 队列的序列

    题目描述 现在告诉你有一个队列,一开始它是空的,首先你会把 1,2,3,-m 这 m 个数依次push入这个队列. 接着,会进行 n 次操作,每次操作你需要进行如下操作: 首先,获得队首元素,输出队首 ...

  7. multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded

    情景再现: 上传文件到.net(wcf)后台时,总是上传不成功,后台要求Content-Type是application/octet-stream,我使用multipart/form-data方式,c ...

  8. H3C VLAN显示及维护

  9. 彻底弄懂slice和splice的区别

    总觉得数组和字符串中的一些方法的使用很难记,可能是日常都是在学理论,缺少实际应用.不多说了,继续学习吧! 一句话先提前概括: slice(start,end) 从哪到哪开始删 splice(strt, ...

  10. CodeForces 1213F (强联通分量分解+拓扑排序)

    传送门 •题意 给你两个数组 p,q ,分别存放 1~n 的某个全排列: 让你根据这两个数组构造一个字符串 S,要求: (1)$\forall i \in [1,n-1],S_{pi}\leq S _ ...