IOC详解

IOC概念

什么是IOC:

  • 控制反转,把对象创建和对象间的调用过程,交给Spring进行管理。
  • 使用IOC可以降低耦合度。
  • IOC底层原理:XML解析,工厂模式,反射。

图解IOC底层原理:

在这里插入图片描述

IOC思想基于IOC容器完成的,IOC容器底层就是对象工厂
Spring提供IOC容器实现两种方式:
1.BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员使用。加载配置文件的时候不会去创建对象,在获取对象使用才去创建对象。
2.ApplictionContext:BeanFactory接口的子接口,提供更多更强大的功能,一般有开发人员使用,加载配置文件时候就会创建对象。

实现关系:
在这里插入图片描述常用的实现类:

  • ClassPathXmlApplicationContext从类路径ClassPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。
  • FileSystemXmlApplicationContex从指定的文件系统路径中找寻指定的XML配置文件找到并装载完成ApplicationContext的实例化工作。

DI

DI(Dependency Injection):依赖注入。DI就是在指IOC容器内实现的将依赖对象注入的概念

IOC与DI的关系:起始它们使用一个概念的不同角度描述。但是由于控制反转概念比较模糊,所以2004年又给出了新名字“依赖注入”。

IOC操作Bean管理

什么是Bean管理:Spring创建对象,Spring注入对象。
Bean管理有两种方式,XMl配置文件方式实现,在这里插入代码片基于注解方式实现
1.XML方式创建对象:

<bean id="user" class="com.gz.pojo.User"></bean>

注意:

  • 在Spring配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象的创建。
  • id属性:位置标识,class属性:全路径(包路径)
  • 创建对象的时候,默认执行无参构造方法完成对象的创建。

2.基于XML方式注入属性
(1.set方法注入:创建类,定义属性和对象的set方法
User类:

public class User {
    private String name;
    private Integer id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        id = id;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", Id=" + id +
                '}';
    }
}

Spring配置文件:
使用property完成属性的注入:name:类中的属性名,value:向属性名中注入的值。

    <property name="name" value="gz"></property>
    <property name="id" value="0"></property>
</bean>

(2.使用有参构造器进行注入:创建类,定义属性对应有参构造方法。

有参构造器:


public User(String name, Integer id) {
        this.name = name;
        this.id = id;
    }

Spring配置文件:

<bean id="user" class="com.gz.pojo.User">
        <constructor-arg name="name" value="gz"></constructor-arg>
        <constructor-arg name="id" value="0"></constructor-arg>
    </bean>

3.注入其他类型属性
(1.null值

<property name="address">
<null/>
</property>

(2.属性值包含特殊符号

  • <>进行转义&lt;&gt;
  • 或者把特殊符号写入CDATA
<property name="address">
<value> <![CDATA[<<南京>>]]></value>
</property>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值