• 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就是通过 反射来实现注入的。

                   

     

  • 相关阅读:
    MySql 范式
    MySql 多表关系
    MySql 约束条件
    MySql 枚举和集合 详解
    【RoR win32】新建rails项目找不到script/server的解决办法
    【RoR win32】安装RoR
    【RoR win32】提高rails new时bundle install运行速度
    【bs4】安装beautifulsoup
    【py分析网页】可能有用的-re去除网页上的杂碎
    【pyQuery】抓取startup news首页
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4911809.html
Copyright © 2020-2023  润新知