zoukankan      html  css  js  c++  java
  • 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能够将软件中的耦合性降低.

     

     

  • 相关阅读:
    chrome.declarativeWebRequest
    webRequest模块的解读
    C#连接池
    sftp
    Lynx
    LD_PRELOAD & LD_LIBRARY_PATH 动态库路径
    libc.so.6 误删后修复
    man 转 pdf _____ jpg 转 pdf
    here文档
    lsof fuser
  • 原文地址:https://www.cnblogs.com/tongxuping/p/7056064.html
Copyright © 2011-2022 走看看