Spring-IOC(控制反转)和DI(依赖注入)

1.什么是IOC(控制反转)

简单理解:就是将创建对象的权力,由JAVA代码转移到Spring容器,由Spring的容器控制创建对象,就是控制反转。Spring创建对象时,读取配置文件信息,然后通过反射机制给我们创建好对象储存起来,当我们需要对象时候,通过id获取对象即可,不需要我们自己去new。

Spring体系结构:

2.Spring IOC代码测试

【1】创建一个maven项目

【2】pom.xml导入依赖项

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.5</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>

【3】定义一个接口

package com.jlx.dao;
public interface EmpDao {
    int addEmp();
}

【4】定义一个实现类

package com.jlx.dao.impl;

import com.jlx.dao.EmpDao;

public class EmpDaoImpl implements EmpDao {
    @Override
    public int addEmp() {
        System.out.println("EmpDaoImpl addEmp invoked");
        return 0;
    }
}

【5】为了读取容器对象,我们在resources下新建一个spring.xml文件

bean标签的两个数学

id:找对象用的id(见名知意)

class:要实例化的对象

<?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">

    <bean id="empDao" class="com.jlx.dao.impl.EmpDaoImpl"></bean>
</beans>

【6】创建一个test测试用例,获取容器

    @Test
    public void testGetBean(){
        //获取容器
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring.xml");
        EmpDao empDao = (EmpDao) applicationContext.getBean("empDao");
        empDao.addEmp();
    }

【7】测试结果

这样就完成了一个基本的IOC容器测试

3.IOC原理

【1】 XML解析技术读取配置文件

<bean id="empDao" class="com.msb.dao.impl.EmpDaoImpl"></bean>

将上面的信息读取进入程序  对象的ID ,一个是对象的类的全路径名

【2】反射技术实例化对象,放到容器中
      获得类的字节码:
      Class clazz =Class.forName("com.msb.dao.impl.EmpDaoImpl")
      通过字节码实例化对象:
      Object obj  = clazz.newInstance();
      将对象放到一个map集合中:
      map.put("empDao",obj)

3工厂模式返回Bean对象 getBean方

     public Object getBean(String name){
         Object obj =map.get(name);
         return obj;
     }   

BeanFactory接口: IOC容器基本功能接口,是spring内部使用的接口,我们在处理业务时一般不直接使用该接口。
ApplicationContext接口: BeanFactory的子接口,提供更多更强大的功能,研发人员一般使用的接口。

4.什么是DI(依赖注入)

DI(Dependency Injection),即“依赖注入” 就是创建属性时给对象属性赋值。由于对象的属性可能有好多数据类型,依赖注入就会将更多的的对象之间的关系整合到一起,形成一个庞大的依赖关系。

DI处理的是对象的属性赋值和互相依赖的关系。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值