IOC

2021/6/17 11:00:36

本文主要是介绍IOC,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

IOC

我们之前的业务中,用户的需求可能会影响我们原来代码,我们需要根据用户的需求去修改原代码,如果程序的代码量十分巨大,修改一次的成本代价十分昂贵!

原来:

private UserDao userDao=new UserDaoImpl();

我们使用一个set接口实现,已经发生了革命性的变化

private UserDao userDao;
//利用set进行动态实现值的注入
public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}
@Test
public void test(){
    UserService userService = new UserServiceImpl();
    // ((UserServiceImpl) userService).setUserDao(new UserDaoImpl());  可转变多个实现类
    ((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());
    userService.getUser();
}
  • 之前,程序是主动创建对象,控制权在程序猿手上

  • 使用了set注入后,程序不在具有主动权,而是变成了被动的接受对象

    这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低,可以更加专注的在业务的实现上,这是IOC的原型

    img

本质

控制反转(IOC:Inversion of Control)不是什么技术,而是一种设计思想

DI(依赖注入)是实现IOC的一种方法

也有人认为DI只是IOC的另一种说法,没有IOC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓的控制反转就是:获得依赖对象的方式反转了

img

IoC是Spring框架的核心内容,使用多种方式完美的实现IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从IoC容器中取出需要的对象。

img

控制反转是一种通过描述(XML或者注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法就是依赖注入!

HelloSpring

新建一个pojo包,在包下创建一个Hello实体类

public class Hello {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Hello{" +
                "name='" + name + '\'' +
                '}';
    }
}

添加Spring配置文件 beans.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
                           https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 使用Spring来创建对象 在Spring中这些都称为Bean
        Hello hell = new Hello()
         bean = 对象  new Hello()
        id=变量名 hello
        class=new Hello()
        property 相当于给对象中的属性设置一个值
        ref:引用Spring容器中创建好的对象id
        Values: 具体的值,基本数据类型和String
 -->
    <bean id="hello" class="com.dada.pojo.Hello">
        <property name="name" value="Spring"></property>
    </bean>
</beans>
  • id=变量名 hello
  • class=new Hello()
  • property 相当于给对象中的属性设置一个值
  • ref:引用Spring容器中创建好的对象id
  • Values: 具体的值,基本数据类型和String

测试代码

@Test
public void test(){
    //获取Spring的上下文对象
    ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
    //我们的对象现在都在Spring中管理了。我们要使用直接去里面取出来就可以了
    Hello hello = (Hello) context.getBean("hello");
    System.out.println(hello);
}

Hello对象是谁创建的?

  • hello对象是由Spring创建的
    Hello对象的属性是怎样设置的?
  • 是由Spring容器设置的
    • 这个过程叫做控制反转
    • 控制
      • 谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的。
    • 反转
      • 程序本身不创建对象,而变成被动的接受对象。
    • 依赖注入
      • 就是利用set方法进行注入的
    • IoC是一种编程思想,有主动的编程变成被动的接收
    • IoC:对象由容器创建、管理和配置。


这篇关于IOC的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程