Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是:
- 依赖注入(dependency injection,DI)
- 面向切面编程(aspect oriented programming,AOP)
通过依赖注入DI,对象的依赖关系由系统中负责协调各对象的第三方组建在创建对象的时候进行设定。对象无需自行创建和管理它们的依赖关系。
如果一个对象只通过接口(而不是具体实现类或初始化过程)来表明依赖关系,那么这种依赖就可以在对象毫不知情的情况下,用不同的具体实现进行替换。这也就是DI带来的最大利益——松耦合。
创建应用组件之间协作的行为通常称为装配(wiring)。
Spring有多种装配bean的方式,采用XML是很常见的一种装配方式
另外还可以使用Java来描述配置(@Configuration和@bean)
Spring 通过应用上下文(Application Context)装载 bean 的定义并把它们组装起来。
Spring应用上下文全权负责对象的创建和组装。
借助AOP,可以使用各种功能层去包裹核心业务层。这些层以声明的方式灵活地应用到系统中,你的核心应用甚至根本不知道它们的存在。这是一个非常强大的理念,可以将安全、事务和日志关注点与核心业务逻辑相分离。
一个简单的AOP示例是,给业务逻辑实现某种监听,这种监听可以在业务逻辑执行之前实现某些功能,可以在业务逻辑执行之后也实现某些功能。一个简单的AOP示例是:
在基于Spring的应用中,你的应用对象生存于Spring容器(container)中。Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡(在这里,可能就是new到finalize())
容器是Spring框架的核心。Spring容器使用DI管理构成应用的组件,它会创建相互协作的组件之间的关联。Spring自带了多个容器实现,可以归为两种不同的类型。
- bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI支持。
- 应用上下文(由org.springframework.context.ApplicationContext接口定义)基于BeanFactory构建,并提供应用框架级别的服务(有多种不同的应用上下文实现,基于文件配置的,基于类配置的)
bean的生命周期:
Spring框架由6个定义良好的模块分类组成:
关于 spring boot:
Spring极大地简化了众多的编程任务,减少甚至消除了很多样板式代码,如果没有Spring的话,在日常工作中你不得不编写这样的样板代码。SpringBoot是一个崭新的令人兴奋的项目,它以Spring的视角,致力于简化Spring本身。SpringBoot大量依赖于自动配置技术,它能够消除大部分(在很多场景中,甚至是全部)Spring配置。它还提供了多个Starter项目,不管你使用Maven还是Gradle,这都能减少Spring工程构建文件的大小。