IOC(Inversion of Control,控制反转)并不是一种技能,而是一种编程思想,最常见的实现方式叫作“依赖注入”,还有一种方式叫作“依赖查找”。传统的程序设计中,对象之间的依赖关系通常由对象自身来创建和管理。例如,一个类在其内部直接创建它所依赖的其他对象。而 IOC 的核心思想是将对象的创建和依赖关系的管理控制权从对象本身转移到外部容器(如 Spring 容器)。也就是说,对象不再自行创建和管理其依赖的对象,而是由外部容器负责创建和注入这些依赖对象。 依赖查找
依赖查找会自动获取,在需要的时间通过调用框架提供的方法来获取对象,而且在获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。 依赖注入
依赖注入则会被动地等待容器为其注入依赖对象,由容器通过类型大概名称将被依赖对象注入相应的对象中。
有了IOC就不需要手动创建对象了,只需要通过@Autowired注解即可,别的 IOC 可以将对象之间的依赖关系从代码中分离出来,降低对象之间的耦合度。
使用IOC以后,类通过容器摆脱了对具体实现的依赖,只对接口有依赖。依赖抽象的接口,屏蔽具体的实现,可以降低代码的耦合度,也很符合面向对象设计的依赖倒转原则。
AOP
Spring Boot应用启动时做的所有操作都在这个方法内里。固然,在调用上面这个run方法之前,还创建了一个SpringApplication实例。注意:先通过静态方法的run,再静态方法中创建对象实例,实行上面的run实例方法。可以看到,方法的返回值类型为ConfigurableApplicationContext,这是一个接口,我们真正得到的是AnnotationConfigServletWebServerApplicationContext实例。通过类名可知,这是一个基于注解的Servlet Web应用上下文。
总结一下:
1 启动入口
Spring Boot 应用的启动通常从一个包含 main 方法的类开始,这个类会使用 @SpringBootApplication 注解,它是一个组合注解,包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 注解。在 main 方法中,调用了 SpringApplication.run 方法来启动 Spring Boot 应用。