zoukankan      html  css  js  c++  java
  • 控制反转与依赖注入

      关于控制反转和依赖注入的文章和书籍很多,对其定义也解释的也仁者见仁,这里就不赘述了,这是本人(只代表个人观点)理解之后用通俗的例子和平淡的话词为您解释,希望对您有所帮助:

      控制反转(IoC/Inverse Of Control):   调用者不再创建被调用者的实例,由spring框架实现(容器创建)所以称为控制反转。

      依赖注入(DI/Dependence injection) :   容器创建好实例后再注入调用者称为依赖注入。

      当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例,。如果创建被调用者实例的工作不再由调用者来完成,而是由外部容器完成,因此称为控制反转; 创建被调用者 实例的工作通常由外部容器来完成,然后注入调用者,因此也称为依赖注入。

      下面一个小实例:

    public interface Person {
                   void sayHello(); 
            } 
    定义一个接口
    public class Chinese implements Person {
                 public void sayHello() {
                        System.out.println("您好 !");
                 }
          }
    第一个实现类
    public class American implements Person {
    
         public void sayHello() {
                     System.out.println("How do you do .");
                }
    
    }
    第二个实现类

      注意下面的User类与传统设计有什么区别:该类调用Person子类的方法,传统设计在本类中创造实例,而在此类里并没有创造实例

    public class User {
               Person p;
                public Person getP() {
                    return p;
               }
                //使用setter注入
              public void setP(Person p) {
                  this.p = p;
              } 
              
    
      //调用person子类重写的sayHello方法,这里的p并没有实例化
    
        public void function(){
                  p.sayHello();
                }
    
    }
    User
    public class Container{
    
        public static User getBean(){   
    
            Person p=new Chinese();
    
            User user = new User();
    
             //由容器‘注入’实例
    
            user.setP(p);
    
            return user;
    
        }
    
    }
    外部容器
    public class Test{
    
        public static void main(String[] args){
    
               User user = Container.getBean();
    
               user.function();
    
        }
    
    }
    测试类

      //后台输出‘您好’

      通过这个例子应该看懂了控制反转,和依赖注入了吧,这个是不是与传统设计相‘反了’。:-D

  • 相关阅读:
    3. What’s New in Spring Security 4.2 spring security 4.2的新功能
    2. Introduction介绍
    1. Getting Started入门
    32. CAS Authentication
    Java序列化
    hive优化--数据倾斜优化
    hive优化之——控制hive任务中的map数和reduce数
    maven中引入jstl
    redis位操作
    Windows单机安装hadoop
  • 原文地址:https://www.cnblogs.com/SamFlynn/p/4592157.html
Copyright © 2011-2022 走看看