• IoC的原理


    一句化来概括 IoC :IoC 是一种帮助我们解耦个业务对象之间依赖关系的对象绑定方式。

    首先来理解一下 IoC 原理,刚进公司的时候见领导的时候,听到总监和另外一名同事说 IoC 很简单,当时的具体设问场景我已经记不清了。在深入了解 IoC 之后,觉得确实简单,不过同一件事情、同一个思想,在具体落地实现中,才真正体现水平高低,这里简单介绍一下 IoC 原理。

    一、未使用IoC思想

    // 业务bean
    public class ClassA{
        private ClassB b = new ClassB();
        public void setB(ClassB b) {
            this.b = b
        }
        public ClassB getB() {
            return this.b;
        }
    }
    
    // 业务bean
    public class ClassB{
    }
    
    // 处理逻辑
    public class Test{
        public static void main(){
            ClassA a = new ClassA();
        }
    }
    

    上面的代码中 ClassA 依赖于 ClassB,在 ClassA 实例化时对依赖的 ClassB 也做了实例化。被注入对象直接依赖于被依赖对象,被注入对象直接负责被依赖对象的实例化。

    二、使用IoC思想

    // 业务bean
    public class ClassA{
        // 不进行实例化动作
        private ClassB b;
        public void setB(ClassB b) {
            this.b = b
        }
        public ClassB getB() {
            return this.b;
        }
    }
    
    // 业务bean
    public class ClassB{
    }
    
    // 处理逻辑
    public class Test{
        public static void main(){
            container.getBean("a");
        }
    }
    
    // IoC容器
    public class Container{
        Map<String, Object> beanMap = new HashMap<>();
        public Container() {
            ClassB classB = new ClassB();
            ClassA classA = new ClassA();
            classA.setB(classB); 
            beanMpa.add("b", classB);
            beanMap.add("a", classA);
        }
        public Object getBean(String beanName){
            return beanMap.get(beanName);
        }
    }
    
    

    被注入对象和依赖对象都由 Container(IoC Service Provider)统一管理,它们之间的依赖也由 Container 来注入。对 业务 bean 之前进行解耦,让我们的业务 bean 保持为简单的 POJO。

    三、IoC的优势

    依赖于接口,而不依赖于实现类,使系统和业务易于拓展。

    // 业务bean
    public class ClassA{
        private ClassB b;
        public void setB(ClassB b) {
            this.b = b
        }
        public ClassB getB() {
            return this.b;
        }
    }
    
    // 业务接口(有多个实现类)
    public interface ClassB{
    }
    
    // 业务bean(默认实现)
    public interface ClassB1 implement ClassB{
    }
    
    // 业务bean(拓展实现)
    public interface ClassB2 implement ClassB{
    }
    
    // 处理逻辑
    public class Test{
        public static void main(){
            container.getBean("a1");
            container.getBean("a2");
        }
    }
    
    // IoC容器
    public class Container{
        Map<String, Object> beanMap = new HashMap<>();
        public Container() {
            ClassB classB1 = new ClassB1();
            ClassB classB2 = new ClassB2();
            ClassA classA1 = new ClassA();
            classA1.setB(classB1); 
            ClassA classA2 = new ClassA();
            classA2.setB(classB2); 
            beanMpa.add("b1", classB1);
            beanMpa.add("b2", classB2);
            beanMap.add("a", classA1);
            beanMap.add("a", classA2);
        }
        public Object getBean(String beanName){
            return beanMap.get(beanName);
        }
    }
    
    

    面向接口编程,在增加 ClassB 新的实现类时,不需要修改依赖于 ClassB 接口的类。

    四、写在最后

    文中的 Container 相当粗糙,管理的更多的 bean ,这样硬编码的 Container 就力有不逮了。正常 Container 会配合指定的配置文件一起使用,Container 中包含稳定的处理逻辑,bean 的描述信息和 bean之前的依赖关系信息由指定的配置文件来给定。Container 通过读取配置文件来达到管理 bean 和 依赖注入的能力

    一句化来概括 IoC :IoC 是一种帮助我们解耦个业务对象之间依赖关系的对象绑定方式。

    跳转目录:https://www.cnblogs.com/bsyt/p/13162588.html

  • 相关阅读:
    C# GDI生成清晰【高质量】图片
    Myeclipse项目内容没有报错但是项目上面却有红色叉叉
    JRE System Library 与Java EE Libraries的区别
    [原创]Java导出Excel
    [原创]java获取word文档的条目化内容
    [原创]java获取word里面的文本
    各种java生成word解决方案的优缺点对比
    [原创]Java生成Word文档
    [原创]java实现word转pdf
    [原创]java调用PageOffice生成word
  • 原文地址:https://www.cnblogs.com/bsyt/p/13283543.html
Copyright © 2020-2023  润新知