IOC和DI

IOC 开发基本步骤:
    1.导jar包
    2.编写实体类
    3.编写XML文件
    4.启动Spring容器
    5.通过Spring容器来获取对象,并通过对象执行实际操作

Spring 获取对象的方式:(2种)
    1.通过id
        -- getBean("bean中的id值");
    2.通过class
        -- getBean("xx.class");
        -- 此种方法最终还是通过id值来获取对象。使用class类型可能会出现一对多的现象。容易出现异常。
        
Spring 创建对象的方式:(4种)
    1.默认的无参构造方法创建对象;
        -- 底层是调用无参构造函数,通过Java中的反射机制来创建对象。
    2.Spring工厂创建对象:
        -- 需要实现FactoryBean<T>接口,并实现其中的方法


    3.静态工厂创建对象:
        -- 用来创建一些不能直接创建的类,比如abstract或者interface等。
        -- 要求必须在方法上加上 static 关键字。在XML配置Bean标签中需要添加factory-method属性,该属性指向实现的方法。
        -- 工厂类不会被实例化。
        -- 在运行时,若没有出现static关键字,必然会有异常出现。


    4.实例工厂创建对象:
        -- 先创建实例工厂对象。
        -- 再通过实力工厂对象调出对象中的方法。factory-Bean="实例工厂的id" factory-method="方法名"


   
Spring中对象的单例和多例
    scope="singleton" -- 设为单列
    scope="protoType" -- 设为多例
    
    单例:在内存中对象有且只有一份
 
    发现:
        在spring容器中,默认创建的对象都是单例的。
        在spring容器中默认使用单例对象便于维护。
        
    注意:
        如果对象是多例对象.spring容器只负责对象的创建,不负责维护.具体的生命周期由使用者决定.
        如果对象是单例的,那么Spring容器维护它的生命周期,生命周期基本和容器一致.
        

懒加载:
    在对象被使用时再创建对象,而不是传统的提前创建对象,这样大大浪费资源。
    使用规则:在配置对象的Bean标签中添加一个 lazy-init 属性。
                -- 该属性有三个值:lazy-init="default/false/true"; 在没有添加该属性时就是default或false值。
                -- 若需要在所有的对象中使用懒加载则在Beans父标签最后添加该属性。lazy-init="true"
    注意:在lazy-init和scope一起使用时,若scope设为了多例时,lazy-init的值不管是false还是true懒加载都会生效。
            因为在多例时,对象就是在调用时再去创建对象并覆盖原先的对象。

自定义的初始化和销毁方法:

  整个spring中对象的简单生命周期划分为4部分(整个spring容器中对象的生命周期经历了12个过程)

    1.对象实例化

    2.调用初始化方法

    3.对象完成特定的操作

       4.对象销毁.

 

Spring中的DI:表示依赖注入.

  依赖注入的方式:

    1.set方法注入  必须要有set方法

    2.构造方法注入

 

 

 Spring中IOC和DI的意义:

  1.能够将程序中间层对象的创建过程简化了,都交给spring容器来完成.

  2.Spring中使用IOC和DI能够将软件中的耦合性降低.

 

 

原文地址:https://www.cnblogs.com/tongxuping/p/7056064.html