spring 容器(控制反转及依赖注入)

spring:是一个容器,项目开始就一直在运行;

              spring--加载进内存里面 容器中有监听器  引入容器,而struts注重运行时;

         核心类中监听器...监听启动后可以从context(上下文即spring所有的配置)中获取内容,将核心配置文件(applicatinContext.xml)交给spring容器)

  spring 容器(控制反转及依赖注入)

 

1.实例化 spring IOC容器(让他通过构造器实例化类) 的方法:

spring 容器(控制反转及依赖注入)

2.实例化bean 的方法:

      1.构造器实现: 在applicationContext.xml 中构造一个 bean(class) ,spring 容器就可以读到该bean.可以利用该class所指向的类的构造函数来实例化(即实例化该bean,生成实例

spring 容器(控制反转及依赖注入)

        2.静态工厂实例化实例化的是该方法返回的内容,而不是该类的实例;

         (容易产生单例)配置bean(相当于完成了new 实例和用实例调用方法)--通过方法返回实例  逆向思维

            spring 容器(控制反转及依赖注入)

      3.实例化工厂(非静态的工厂实例化)不断输出各种实例;

 

3.IOC:控制反转

       <1>.将new 实例的过程交给spring ,即将对实例的控制权交给spring(主要让他管理这些bean--定义一次实例 ,随时都能用)  我不用再管new的过程    只管用容器已经创建的实例就好;

       <2>. 怎么用new 的实例:即bean的操作(getBean() 机制--控制反转);

              spring 通过上下文拿到你的bean (一个一个的对象,即源码中的类)对象---调用属性;

spring 容器(控制反转及依赖注入)

4.DI:依赖注入

     本类引入其他类 (但是不用new  将已有(bean /属性)的注入给你 )如:将Student 依赖进 User (用User 创建一个student对象就可以了,student相当于User 类的一个成员属性)

依赖注入的方法:

1.构造器注入

构造函数的参数对象类型(User 类中定义一个student对象,User 类相当于多了一个属性 ,加 get()/set() 方法)

spring 容器(控制反转及依赖注入)

2.setter注入:<property></property>标签 value注入属性值

           <1>. ref--引入其他bean 的 name属性值,,,value:对直接变量和基本类型等可以直接赋值,不能对对象赋值;

                     spring 容器(控制反转及依赖注入)

            <2>. idef(该bean 是否存在)、 local(该bean 是否与引入它的bean存在同一配置文件中).xml解析器对引入的bean 进行安全验证,提前发现错误;ref 只是引入,在请求时才会找该bean 的信息

               spring 容器(控制反转及依赖注入)

              spring 容器(控制反转及依赖注入)

             <3>.父容器:<ref parent=""></ref>

                 spring 容器(控制反转及依赖注入)

 

4.内部bean:(idef 可引入)

spring 容器(控制反转及依赖注入)

 

5.bean 的作用域:

    创建一个bean 的实质是用该bean 定义的类来创建真实实例的“配方”(定义一个你要创建什么东西)。与class 类似,根据一张“处方“就可以创建多个实例--反射原理; 这样,不仅可以控制 注入带对象的依赖和配置值,也可以控制选择对象的作用域。不必在java class级别(public/private....)定义作用域

spring 容器(控制反转及依赖注入)

 

ps:spring框架很强大,我们需要了解其底层原理 才能更好的使用它!