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方法以及无参的构造函数等.
    1. /**
    2. * 剧本类
    3. * @author 胖橘
    4. *
    5. */
    6. @Data
    7. public class Script {
    8. private Integer id;
    9. private Integer scriptName; //剧本名称
    10. }

      

    1. /**
    2. * 导演类
    3. * @author 胖橘
    4. *
    5. */
    6. @Data
    7. public class Regisseur {
    8. private Integer id;
    9. private String regisseurName;//导演名字
    10. private Integer scriptId; //剧本id
    11. }

      

    1. /**
    2. * 角色类
    3. * @author 胖橘
    4. *
    5. */
    6. @Data
    7. public class Role {
    8. private Integer id;
    9. private String roleName;//角色名称
    10. private Integer scriptId;//剧本id
    11. }

      

    1. /**
    2. * 演员类
    3. * @author 胖橘
    4. *
    5. */
    6. @Data
    7. public class Actor {
    8. private Integer id;
    9. private String actorName;//演员名字
    10. private Integer roleId;//角色名字
    11. }

      

    1. public class Test {
    2. public static void main(String[] args) {
    3. //创建<<知否剧本>>
    4. Script script=new Script();
    5. script.setId(1);
    6. script.setScriptName("知否");
    7. //创建剧本中的女主角明兰
    8. Role role=new Role();
    9. role.setId(1);
    10. role.setRoleName("明兰");
    11. role.setScriptId(1);
    12. //创建想拍这部剧本的导演
    13. Regisseur regisseur=new Regisseur();
    14. regisseur.setId(1);
    15. regisseur.setRegisseurName("张开宙");
    16. regisseur.setScriptId(1);
    17. //确定剧本女主角演员
    18. Actor actor=new Actor();
    19. actor.setId(1);
    20. actor.setActorName("赵丽颖");
    21. actor.setRoleId(1);
    22. }
    23. }

     

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

版权声明:本文为chenfan29原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chenfan29/p/10492116.html