本文介绍: IOC的全英文名是:Inversion Of Control ,直译过来就是控制反转,控制反转是把传统上由程序代码直接操控对象new对象)的调用权交给ioc容器,由容器实现对象创建依赖,销毁,初始化等等。Spring 框架一个 IOC 容器实现,DI 依赖注入是它的实现一个原则,提供依赖查找依赖注入两种依赖处理管理着 Bean 的生命周期。Spring 还提供了 AOP 抽象事件抽象事件监听机制、SPI 机制、强大的第三方整合、易测试性等其他特性

1、什么是IOC?

IOC的全英文名是:Inversion Of Control ,直译过来就是控制反转,控制反转是把传统上由程序代码直接操控对象(new对象)的调用权交给ioc容器,由容器来实现对象创建依赖,销毁,初始化等等。

2、什么是 Spring IOC 容器?

Spring 框架是一个 IOC 容器的实现,DI 依赖注入是它的实现一个原则,提供依赖查找依赖注入两种依赖处理管理着 Bean 的生命周期。Spring 还提供了 AOP 抽象事件抽象事件监听机制、SPI 机制、强大的第三方整合、易测试性等其他特性

3、IOC 容器的作用?

Spring IOC 负责创建对象管理对象通过依赖注入(DI)装配对象配置对象)并且管理这些对象的整个生命周期

简单的来说就是:

我们自己new一个对象,可能会导致程序耦合度过高,后期可能维护不便。引入IOC,将创建对象的控制权交给Spring的IOC容器;如果要去使用对象,通过DI(依赖注入)@Autowired注解 自动注入,就可以使用对象了!

4、IOC 和 DI 的区别

DI 依赖注入不完全等同于IOC ,更应该说 DI 依赖注入是 IOC 的一种实现方式策略

依赖查找和依赖注入都是 IOC 的实现策略

5、IOC的优点有哪些

6、Spring IoC 的实现机制是什么?

Spring 中的 IoC 的实现原理就是工厂模式反射机制。

工厂对应的就是beanfactory的getBean()方法反射就是Spring底层实例化对象所采用的机制

实现代码示例

interface fruit{
    void eat();
}
 
class Apple implements fruit {
    @Override
    public void eat() {
        System.out.println("Apple");
    }
}
 
class Orange implements fruit {
    @Override
    public void eat() {
        System.out.println("Orange");
    }
}
 
class Factory {
    public static fruit getInstance(String ClassName) {
        fruit f = null;
        //通过反射创建对象 
        try {
            // 相当于Spring中new了一个ClassPathXmlApplicationContext
            f = (fruit)Class.forName(ClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return f;
    }
}
 
class Test {
    public static void main(String[] args) {
        //getInstance静态的,直接调用即可Factory.getInstance()
        fruit f = Factory.getInstance("Apple");
        if(f != null)
            f.eat();
    }
}
 
//输出 Apple

注意点:

源码下载https://gitee.com/charlinchenlin/koo-erp

原文地址:https://blog.csdn.net/lovoo/article/details/130461103

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_15475.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注