Spring总结(一)(IoC DI)

一、简介

  Spring是一款非常流行的轻量级开源开发框架,利用该框架的IoC和AOP机制可以实现多层的java ee应用程序开发。Spring是一款全方位的整合框架,能够实现

多个子框架的组合。Spring框架包含许多特性,并被很好地组织在下图所示的六个模块中。

   

二、Spring的IOC(控制反转)和DI(依赖注入)

     首先想说说IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。Spring所倡导的开发方式就是如此,所 有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给 你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是 spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

      把对象的创建交给spring的管理  程序员不再关注对象的创建

      对象的创建的过程:

      1、写一个java类

      2、写一个spring的配置文件,把该类放入到spring容器中

            <bean id="helloWorld" class="cn.itheima03.spring.ioc.createobject.HelloWorld"></bean>

      3、启动spring容器

      4、把对象从spring容器中取出来

      5、对象调用方法

      说明:bean中的id值是唯一的,不能出现相同的ID值

   spring创建bean的方式

      1、默认的构造函数

      2、利用静态工厂方法

         1、提供静态工厂类

         2、在spring的配置文件中提供工厂方法

                <bean id="helloWorld_Factory" class="cn.itheima03.spring.ioc.create.HelloWorldFactory" factory-method="getInstance"></bean>

      3、实例工厂方法

   spring的scope

      1、spring创建对象默认是单例模式

          如果把一个list声明在该bean的属性中,这样list成了共享的数据,所以一般情况下把list声明在方法中

      2、把spring创建的bean改成prototype模式,只需要写一个属性:scope为prototype

   spring什么时候创建对象

      1、在默认情况下,spring容器启动的时候,就创建对象了

           有利于开发:

              当spring容器启动的时候,如果配置文件中有错误,则会报错

      2、当从spring容器中获取bean,当bean调用方法的时候创建对象

              如果所有的bean按照这种模式加载,当spring容器启动的时候是不会报错的

              如果一个bean中有大量的数据,需要的是用到的情况下加载

   spring容器的初始化和销毁:init

       前提条件:spring中的bean是单例的

       1、在一个bean中可以提供init方法和destroy方法

       2、当创建对象完成以后,直接执行init方法,该方法由spring容器来执行

       3、当spring容器关闭的时候,执行destroy方法,该方法由spring容器来执行,由该方法释放资源

    

    说明:

      如果spring中的bean是多例的情况下,spring容器不负责对象的销毁,由程序员把该对象设置为null

      如果spring中的bean是多例,这个时候,不管在配置文件中lazy-init设置成什么样的值,在context.getBean时才要创建对象,而且不负责销毁

     Spring的DI:依赖注入  给属性赋值  set 构造函数赋值

       IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。 比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A 中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个 Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个 Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过 反射来实现注入的。

               

 

原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4911809.html