Spring
1. Spring是什么?
- Spring是一个开源框架,它已经成为基于POJO的轻量级开发框架的领导者。
- Spring是为了解决企业级应用开发的复杂性而创建的,是Java企业级应用的开源开发框架,主要用来开发Java应用。但它不限于服务器端开发,任何Java应用都能在简单性、可测试性和松耦合等方面从Spring中获益。
2. Spring的终极目标?
- 全方位的简化Java开发。
3. Spring是如何做到简化的?
采取了四个策略来降低Java开发的复杂性
- 基于POJO的轻量级和最小侵入性编程
- 通过依赖注入和面向接口实现松耦合
- 基于切面和惯例进行声明式编程
- 通过切面和模板减少样板式代码
4. 简化Java开发
(1)激发POJO的潜能
早期的重量级的框架(struts、webwork等)存在问题:强迫开发者编写大量冗余的代码、应用与框架绑定,且难以编写测试代码。
但是!Spring中类通常没有任何痕迹表明你使用了spring,只用一个简单的java对象就行,甚至有时候一个注解就能是一个POJO。
Spring赋予POJO魔力的方式之一就是依赖注入来装配他们,且保持对象间的松耦合。
(2)依赖注入
依赖注入可以让代码变得异常简单、更容易理解和更易于测试。
耦合——耦合具有两面性:
- 紧耦合:代码难以测试、难以复用和理解,并出现打地鼠型的bug(修复一个,出现一堆bug)
- 一定程度的耦合是必须的:完全没有耦合的代码什么也做不了。
- 因此耦合是必须的,要适当的进行类与类之间的交互
- 依赖注入(DI):对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定。无需自己去创建和管理依赖关系,依赖关系会自动注入到需要他们的对象中。
依赖注入的方式:构造器注入,对象只通过接口来表明依赖关系,那么这种依赖就能够在对象毫不知情的情况下,用不同的具体实现进行替换。
(3)装配
装配:创建应用组件之间协作的行为。
方式:spring最常用的装配方式是XML配置。
观察它是如何工作的:spring通过应用上下文(Application Context)装载Bean的定义并把他们组装起来,spring 应用上下文全权负责对象的创建和组装。
(4)面向切面
- AOP编程: 面向切面编程
- AOP 允许你把遍布应用各处的功能分离出来形成可重用的组件。
- 除了核心功能之外,一些日志、事务管理和安全类的系统服务经常融入到有自身核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为他们总是跨越系统的多个组件。
- AOP使这些日志、安全、事务管理等服务模块化,并以声明的方式将他们应用到他们需要影响的组件中去。结果是这些组件具有更高内聚性以及更加关注自身业务,完全不需要了解可能涉及的系统服务的复杂性。确保了POJO保持简单。
- 利用AOP可以使用各种功能层去包裹核心业务层。
(5)使用模板消除样板式代码
如:JdbcTemplate 使得在执行数据库操作时,避免了传统的JDBC样板式代码。
5. Bean
(1)容器
- 容器是Spring框架的核心。Spring容器使用依赖注入管理构成应用的组件,它会创建相互协作的组件之间的关联。
Spring自带很多容器,总共有两个类型:
- Bean工厂:最简单的容器,提供基本的DI支持
- 应用上下文:基于BeanFactory之上构建,并提供面向应用的服务。
(2)Bean的生命周期
- 正确理解spring容器中的Bean的生命周期很重要,因为也许要利用Spring提供的扩展点来自定义Bean的创建过程。