Skip to content

Ioc控制反转

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

理解:

就是将对象注入到spring容器中让spring去代理,当使用到某一个对象的时候向spring去索要该对象

XML文件头:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>    

XML注册:

使用方式:

//获取注册文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取bean对象
Bean bean = applicationContext.getBean("bean", Bean.class);

1、创建applicationContext.xml注册文件

2、使用格式

<bean id="xxxx" class="xxxx">    
<property/>
</bean>

3、property使用

property标签:使用这种标签是用 Set 方法完成注入属于一定要有对应的set方法

<property name="propertyName" value="propertyValue" ref="beanId"/>

name:对应bean中的属性名,要求该属性必须提供可访问的set方法(严格规范为此名称是set方法对应名称)

value(其他):设定非引用类型属性对应的值,不能与ref同时使用

ref(对象):设定引用类型属性对应bean的id ,不能与value同时使用

注:一个bean可以有多个property标签

4、构造器注入

name:对应bean中的构造方法所携带的参数名

value:设定非引用类型构造方法参数对应的值,不能与ref同时使用

<bean>    
    <constructor-arg />
</bean>
<constructor-arg name="argsName" value="argsValue />

5、集合类型数据注入

  • 名称:array,list,set,map,props

  • 类型:标签

  • 归属:property标签 或 constructor-arg标签

  • 作用:注入集合数据类型属性

    xml
    //格式
    <property
         <list></list>
    </property>
    
    //list
    <property name="list"
        <list>       
           <value>xxx</value>       
           <value>xxx</value
       </list>
    </property>
    
    //props list
    <property name="props">
        <props>
            <prop key="key1">xxxx</prop>
            <prop key="key1">xxxx</prop>
        </props>
    </property> 
    
    //array List
    <property name="array">
        <array>
            <value>xxxx</value>
             <value>xxxx</value
         /array>
    </property>
    
    //set
    <property name="set"
      <set>         
         <value>xxxx</value>      
          <value>xxxx</value
       </set>
    </property>
    
     //map
     <property name="map">
        <map>
            <entry key="key1" value="xxxx"/>
            <entry key="key2" value="xxxx"/>
        </map>
    </property>

6、作用域(sorce)

Bean的作用域(sorce)有singleton、prototype、request、session和application五种取值。其代表含义为:

  1. singleton:在spring IOC容器仅存在一个Bean实例,Bean以单例方式存在。是bean作用域范围的默认值,这个仅存的Bean实例创建时机为 XML 被加载的时候。
  2. prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,既创建时机为调用getBean方法实例化时。
  3. request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。
  4. session:同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。
  5. application:限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。

7、简化标签

可以在 XML 中简化上面两种依赖注入方式:既通过p命名空间和c命名空间完成。这两种命名空间只是简化了上面提到了两种标签。

p标签注入和c标签注入需要在约束条件中加入一条约束代码,分别是xmlns:p=“http://www.springframework.org/schema/p” 和xmlns:c=“http://www.springframework.org/schema/c”。

<!--源代码-->
<bean id="..." class="...">
     <property name="name" value="张三"/>
</bean>
<!--通过p命名注入,可以直接注入属性的值:properties-->
<bean id="..." class="..." p:name="张三" p:age="18"/>

 <!--通过c命名注入,通过构造器注入:construct-args-->
<bean id="..." class="..." c:name="盾山" c:age="19"/>

8、import

不同的类注册需要在不同的bean中,而在项目整合时需要进行整合。而在Spring中提供了一种整合Bean的方法,使用

标签进行整合

<improt resource="url">
最近更新