1. 为什么要用spring?
    1. 因为依赖解耦和注入是软件开发中最基础的原则之一。
    2. spring的ioc模块提供了对该原则的一整套实现,对比传统的工厂模式来讲,spring提供了多样的依赖对象定义(xml、注解),方便的注入和生命周期各个环节的扩展,可以让应用开发过程中更多关注放在业务实现而不是依赖管理上。
    3. 除了spring-ioc之外,spring还提供了另外一个软件开发思想spring-aop的实现,为基于的db应用提供了spring-data来管理连接池以及orm,基于约定大于配置的思想提供了spring-boot来加速软件开发的效率,为分布式微服务架构提供了spring-cloud服务。所以说spring是开发j2ee应用最强大的工具箱。
  2. 详细描述下spring如何实现依赖注入以及过程。
    1. 首先开发需要基于xml或者注解进行bean定义,以及依赖树定义
    2. 应用启动过程中通过监听或者钩子函数,比如监听tomcat的启动事件,来触发spring读取bean定义内容,进行find -> load -> parse -> init,bean生成完之后基于依赖树进行依赖注入。
  3. spring循环依赖是怎么处理的?

IoC

  • 将应用中的对象的依赖和管理抽离出来进行统一注入和生命周期管理,可以很好解决软件系统中代码高度耦合问题。想象一下一个公司如果工作由自己分配,工资由自己发,项目由自己来谈,是不是感觉很累,你只希望做自己的核心工作,而希望把一些额外的工作交给其他或者更专业的人来做。那么IoC就是这样的角色。总结一句话:抽离出依赖统一管理。
  • spring是IoC思想分非常受欢迎的实现,而且除了对依赖进行管理之外,还增加了对象的生命周期管理,各式各样的扩展点等功能。在spring中,管理依赖的平台叫容器,被管理的对象叫bean。
  • 概念定义清楚之后,第一个问题就是如何构建这个容器
    • 编码阶段需要将对象标记为可管理,有注解和xml等方式。
    • 应用启动阶段,根据标记方式进行对象信息定位>加载>解析>初始化
    • 形成容器