浅谈ioc

IoC思想

  • IoC:Inversion of Control,控制反转。是指 把创建对象的控制权交给框架: 要想得到一个对象,由原来的主动创建对象,变成自己被动接收框架创建的对象。

  • IoC是Spring的核心思想之一

  • 作用:用于降低程序间的耦合性

 

Spring的核心-IoC

  • IoC:控制反转,反转的是创建对象的控制权。

    • 原来:需要什么对象,就自己主动new什么对象

    • 现在:需要什么对象,由Spring创建好给我们使用;我们直接接收即可

  • 目的:解耦性,即依赖性

    • 编译期依赖:编译过程中,必须提供依赖的类,否则编译报错

    • 运行期依赖:编译时候不需要,但是程序运行中必须提供依赖的类,否则运行报错

    • 解耦:尽量避免使用编译期依赖,使用运行期依赖

      • 使用反射技术代替new,再把配置信息提取到配置文件里

  • 技术:工厂模式

 

 

 

 

  • bean标签的配置:告诉Spring,要创建什么样的对象

    <bean id="" class="" scope="" init-method="" destroy-method="" lazy-init=""></bean>
    • id:Spring创建好对象之后,用于获取这个对象的唯一标识

    • class:全限定类名,告诉Spring创建哪个类的实例对象

    • scope:bean对象的作用范围

      • singleton:单例的,默认值

        • 何时创建:IoC容器初始化时/第一次使用bean对象时

        • 何时销毁:当IoC容器关闭时销毁

        • 单例bean和IoC容器同年同月同日死

      • prototype:多例的

        • 何时创建:每次获取bean对象,都会创建新的

        • 何时销毁:长时间不使用,JVM垃圾回收

        • IoC容器创建bean对象后就不管了,管生不管养

    • init-method:指定一个初始化方法,当Spring创建完这个对象之后,会立即执行这个方法

    • destroy-method:指定一个销毁方法,当bean对象被销毁时(前),会先执行这个方法

    • lazy-init:是否懒加载。只针对单例bean

      • 如果是true:当第一次获取单例bean时,才会创建这个bean对象

      • 如果是false:默认值,当IoC容器初始化时,就会创建单例bean对象

  • bean的实例化方式:告诉Spring,该如何创建对象

    • 默认的无参构造

    • 工厂的静态方法:

    <bean id="" class="工厂类的全限定类名" factory-method="静态方法名"></bean>
    • 工厂的非静态方法:

    <bean id="xxxFactory" class="工厂类的全限定类名"></bean>
    <bean id="" factory-bean="xxxFactory" factory-method="非静态方法"></bean>

依赖注入:Spring帮我们创建一个对象时,这个对象有一些依赖的值,我们配置一下,让Spring帮我们注入这些依赖的值

  • set方法注入(属性注入)

    • 要求:类里的依赖项要有set方法

    • 配置:使用property标签,给属性注入值

    <bean>
        <property name="属性名" value="简单值"/>
        <property name="属性名" ref="其它bean对象"/>
    </bean>
  • 构造方法注入

    • 要求:类里要有有参构造。每个构造参数就是一个依赖项

    • 配置:使用constructor-arg标签,给构造参数注入值

    <bean>
        <constructor-arg name="属性名" value="简单值"/>
        <constructor-arg name="属性名" ref="其它bean对象"/>
    </bean>
  • p名称空间(本质还是set方法注入)

    • 要求:类里的依赖项要有set方法

    • 配置:在xml里引入p名称空间,然后

    <bean p:属性名="简单值" p:属性名-ref="其它bean对象"></bean>
  • 注入复杂数据(集合数据)

    • 给数组注入:用array标签

    • 给List注入:用list标签

    • 给Set注入:用set标签

    • 给Map注入:用map标签

    • 给Properties注入:用props标签

补充内容

  • 引入properties文件:<context:property-placeholder location="classpath:jdbc.properties"/>

  • 引入模块的配置文件:

    • web层、service层、dao层各有一个配置文件

    • 最终要加载所有的配置文件

      • 把某一文件当成总的配置文件,使用<import resource="classpath:模块配置文件"/>。创建IoC容器时只加载总的配置文件即可

      • 直接在创建IoC容器时,加载所有的配置文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值