简述spring框架中的IOC和DI

本文简要介绍了Spring框架中的IOC(控制反转)和DI(依赖注入)概念。IOC意味着对象的创建和管理交给Spring容器处理,而DI则是IOC的一部分,负责为对象注入依赖。内容包括不同方式创建对象,如构造器、静态工厂和非静态方法。DI的注入方式多样,如按名称、索引、类型、Spring表达式和复杂注入,并提到了自动注入的几种模式及其使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hello World!
IOC和DI可以说是相同的,但有些资料记载把它们进行了细的划分。
IOC(控制反转) 它是将创建的对象的权限交由给spring容器,由它统一创建统一分配。
DI(依赖注入) 它就是在IOC创建好对象之后,为这个对象注入各个属性,这个过程就是依赖注入。
1.创建对象

  • 有参构造

  • 无参构造

  • 静态方法创建对象

    public class PersonFactory {
    public static Person createPerson(){
    System.out.println(“静态工厂创建Person”);
    return new Person();
    }
    }

  • 非静态方法创建对象

     - public class Users{
       public  Person createPerson1(){
        System.out.println("非静态工厂创建Person");
        return new Person();
       }
    }
    <bean id="u2"  class="com.bean.Users"></bean>
    <bean id="u3" factory-method="createPerson1" factory-bean="u2"></bean>
    

2.DI注入
1> 可以通过name属性,按照参数名赋值

  public  Person(String  name , Car car){
        this.name = name;
        this.car = car;
        System.out.println("Person的有参构造方法:"+name+car);
     }    <bean name="person" class="com.itqf.spring.bean.Person">
           <constructor-arg name="name" value="rose"/>
           <constructor-arg name="car"  ref="car"/>    </bean>

2> 可以通过index属性,按照参数索引注入

   > <bean name="person2" class="com.itqf.spring.bean.Person">
    >         <constructor-arg name="name" value="helen" index="0"></constructor-arg>
    >         <constructor-arg name="car" ref="car" index="1"></constructor-arg> </bean>

3> 使用type注入

       public Person(Car car, String name) {
            super();
            System.out.println("Person(Car car, String name)");
           this.name = name;
           this.car = car;
        }


public Person(Car car, Integer name) {
    super();
    System.out.println("Person(Car car, Integer name)");
    this.name = name + "";
    this.car = car;
}

<bean name="person2" class="com.itqf.spring.bean.Person">
    <constructor-arg name="name" value="988" type="java.lang.Integer"></constructor-arg>
    <constructor-arg name="car" ref="car" ></constructor-arg>
</bean>

4> spel spring表达式

 <bean name="car"  class="com.itqf.spring.bean.Car" >
           <property name="name" value="mime" />
           <property name="color" value="白色"/>   </bean>


 <bean  name="person1"  class="com.itqf.spring.bean.Person"  p:car-ref="car">
            <property name="name" value="#{car.name}"/>
            <property name="age" value="#{person.age}"/>

   </bean>

5>复杂注入

   <!-- 数组变量注入 -->
       <property name="arrs">
           <list>
               <value>数组1</value>
               <!--引入其他类型-->
               <ref bean="car"/>
           </list>
       </property>

       <!-- 集合变量赋值-->
       <property name="list">
            <list>
                <value>集合1</value>
                <!--集合变量内部包含集合-->
                <list>
                    <value>集合中的集合1</value>
                    <value>集合中的集合2</value>
                    <value>集合中的集合3</value>
                </list>
                <ref bean="car" />
            </list>
       </property>

       <!--map赋值 -->
       <property name="map">
           <map>
               <entry key="car" value-ref="car" />
               <entry key="name" value="保时捷" />
               <entry key="age"  value="11"/>
           </map>

       </property>

       <!-- properties赋值 -->
       <property name="properties">
            <props>
                <prop key="name">pro1</prop>
                <prop key="age">111</prop>
            </props>
       </property>

6> 自动注入(由程序自动给属性赋值)
autowire:
no 不自动装配(默认值)
byName 属性名=id名 ,调取set方法赋值
byType 属性的类型和id对象的类型相同,当找到多个同类型的对象时报错,调取set方法赋值
constructor 构造方法的参数类型和id对象的类型相同,当没有找到时,报错。调取构造方法赋值
示例:

 <bean id="service" class="service.impl.UserServiceImpl" autowire="constructor">
 </bean>

配置全局自动装配:

<beans default-autowire="constructor/byName/byType/no">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值