Spring学习(一) IOC容器学习

  1. spring IOC (反转控制) ==DI(依赖注入) == BeanFactory
  2. DI的概念:DI:既让调用类对某一接口实现类的依赖由第三方注入,以移除调用类对某一接口实现类的依赖
  3. IOC的注入方式:构造属性接口注入
  4. Spring底层是通过java反射机制进行依赖注入的.
  5. BeanFactory是Spring的基础设施,面向Spring本身;SpplicationContext面向使用Spring框架的开发者
  6. BeanFactory在初始化容器的时,并未实例化,只要第一次访问某个bean时才实例化目标Bean.
  7. ApplicationContext 也就是Spring容器;ApplicationContext的初始化应用上下文时就实例化所有单实例的bean.

  8. 图一详解描述:
                        图一中有4个对象,分别是剧本,剧本导演,剧本角色,角色演员.
                        那么他们之间的关系是怎么样的呢?导演选择剧本,剧本存在角色,角色决定演员.
                        那么我们用常规的代码实现是如何实现的呢?
    注:这边为了代码的整理,使用了lombok的@Data注解,这个注解 会给标识的类自动构建get,set方法以及无参的构造函数等.
    /**
    * 剧本类
    * @author 胖橘
    *
    */
    @Data
    public class Script {
              private Integer id;
              private Integer scriptName;  //剧本名称
    }
    

      

    /**
    * 导演类
    * @author 胖橘
    *
    */
    @Data
    public class Regisseur {
              private  Integer id;
              private  String regisseurName;//导演名字
              private Integer scriptId; //剧本id
    }
    

      

    /**
    * 角色类
    * @author 胖橘
    *
    */
    @Data
    public class Role {
              private Integer id;
              private String roleName;//角色名称
              private Integer scriptId;//剧本id
    }
    

      

    /**
    * 演员类
    * @author 胖橘
    *
    */
    @Data
    public class Actor {
              private Integer id;
              private String  actorName;//演员名字
              private Integer roleId;//角色名字
    }
    

      

    public class Test {
         public static void main(String[] args) {
              //创建<<知否剧本>>
              Script script=new Script();
              script.setId(1);
              script.setScriptName("知否");
              
              //创建剧本中的女主角明兰
              Role role=new Role();
              role.setId(1);
              role.setRoleName("明兰");
              role.setScriptId(1);
              
              //创建想拍这部剧本的导演
              Regisseur regisseur=new Regisseur();
              regisseur.setId(1);
              regisseur.setRegisseurName("张开宙");
              regisseur.setScriptId(1);
              
              //确定剧本女主角演员
              Actor actor=new Actor();
              actor.setId(1);
              actor.setActorName("赵丽颖");
              actor.setRoleId(1);
              
              
         }
    }
    

     

    我们会发现Test中的例子,控制权是在剧本手中的,导演挑选了剧本,剧本控制了角色,角色控制了演员.
    而SpringIOC做的事情 就是控制反转,也就是由导演去决定剧本,导演决定角色,导演去决定谁来演这部剧.
    之前在剧本手中的控制,现在就到了导演手中了.这就是控制反转.
     
    以上均摘自于<<精通Spring4.x企业应用开发实战>>
原文地址:https://www.cnblogs.com/chenfan29/p/10492116.html