IOC详解

IOC概念

什么是IOC:

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

图解IOC底层原理:

IOC详解_第1张图片

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

实现关系:
IOC详解_第2张图片常用的实现类:

  • 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:向属性名中注入的值。

    
    

(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.属性值包含特殊符号

  • <>进行转义<;>;
  • 或者把特殊符号写入CDATA
<property name="address">
<value> >]]>value>
property>

你可能感兴趣的:(Spring,ioc,spring,java)