首页 > 代码库 > Spring IOC之注入

Spring IOC之注入

1.概念

  控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护
  简而言之:
    把本身可以创建对象的权利交给IOC容器,当要实例化该对象的时候,由IOC容器来实例化该对象(专注于使用IOC创建的对象)
2.目的
  创建对象并且组装对象之间的关系
3.步骤
  1.Bean容器初始化
  (即IOC容器加载beans的xml配置文件)
   (加载并初始化配置文件<beans></beans>)
    1.两个基础包
      1.org.springframework.beans
        1.BeanFactory提供配置结构和基础功能,加载并初始化Bean
      2.org.springframework.context
        2.ApplicationContext保存了Bean对象并在Spring中被广泛使用
    2.ApplicationContext初始化方式
      1.本地文件
      2.Classpath
      3.web应用中依赖servlet/Listener
  2.配置
    Spring容器的配置文件
    <beans>
    <bean id=“name”>对象路径</bean>
    </beans>
  3.创建对象并调用
    getBean(“id_name”)
  4.IOC的实现方式
   (向Spring IOC容器注入Bean容器,就是注入bean的方式)
    1.DI(依赖注入)
      1.概念:
        1.就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象之中
          (给属性赋值的关系;1.xml注入(设值、构造)2.注解注入(@Required。。。))
      2.Spring注入是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
        简而言之:
            在IOC容器加载的过程中,会扫描xml文件的相关配置,然后,创建并实例化bean,
            注入,就是在IOC创建bean的时候,给成员变量的赋值
    2.两种注入方式
      1.XML配置bean注入
        (使用xml定义bean)
        1.设置注入
          语法:
            <bean id="标识1" class="类路径1">
            <property name="类路径1的私有属性" ref="标识2" />
            </bean>
            <bean id="标识2" class="类路径2">
            </bean>
          解释:
            property中的name指向的是类路径1对象的私有属性,在IOC容器实例化bean对象的时候,
            自动调用setName()的JavaBean方法,把ref引用的值赋予给属性
          前提:
            该类含有property中name的私有属性,并有该属性的setName()的JavaBean方法
        2.构造注入
          语法:
            <bean id="标识1" class="类路径1">
            <constructor-arg name="类路径1的私有属性" ref="标识2" />
            </bean>
            <bean id="标识2" class="类路径2">
            </bean>
          解释:
            在IOC容器调用类路径1构造器生成实例的时候,把ref引用的值赋予该constructor-arg中的name属性
          前提:
            该类含有constructor-arg中name的私有属性,并含有constructor-arg中name为参数的构造方法
        3.延迟/懒加载
          1.lazy_init,bean的一个参数
          2.其值默认为default;当类注入到bean容器的时候,在Spring容器applicationContext实例化的时候,顺便生成的了
          3.其值为true的时候,会开启懒人模式
          4.当设置bean为原型的时候,懒加载无效
            因为原型是在实例化的时候才有,不会随Spring容器applicationContext一同加载
        4.scope
          1.其值
            singleton、prototype、request、session(后两个跟web工程有关)
        5.生命周期
          1.init-method、destroy-method都是自定义的两个方法
          2.销毁方法的调用时,需要借助applicationContext.close();(applicationContext的接口)
        6.Map
          多个值注入
        7.ref
          1.引用其它的bean设值
          2.两种形式
            1.ref=“beanName”
            2.自定义的就<ref bean="beanName"/>

Spring IOC之注入