核心特性:依赖注入(Dependency injection,DI)和面向切面编程(Aspect-oriented programming,AOP)。
一个Spring组件可以是任何形式的POJO。
Spring策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。
依赖注入
按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码。
通过DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理他们的依赖关系。 依赖关系将被自动注入到需要它们的对象当中去。 构造器注入。
创建应用组件之间协作的行为通常称为装配(wiring)。可以采用XML或者Java来描述配置。
如何工作
Spring通过应用上下文(Application Context)装载bean的定义并把他们组装起来。Spring应用上下文全权负责对象的创建和组装。 DI能让相互协作的软件组件保持松散耦合。
应用切面
面向切面编程(AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件。
实现关注点分离。诸如日志、事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为他们会跨越系统的多个组件。
AOP能够使这些服务模块化,并以声明的方式将他们应用到他们需要影响的组件中去。AOP能够确保POJO的简单性。
使用Spring的aop配置命名空间把bean声明为一个切面。(aop:aspect)。不需要显示的调用它。首先要把他声明为一个Spring bean。
使用模板消除样板式代码
Spring旨在通过模板消除来消除样板式代码。 如JDBC,JMS,JNDI和使用REST服务等场景。
Spring容器 容纳你的bean。
Spring容器负责创建对象,装配他们,配置他们并管理他们的整个生命周期。
容器是Spring框架的核心。Spring容器并不是只有一个。Spring自带了多个容器实现。
- bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI支持。
- 应用上下文(由org.springframework.context.ApplicationContext接口定义)基于BeanFactory创建,并提供应用框架级别的服务,例如从属性文件解析文本信息以及发布应用事件给感兴趣的事件监听者。 多种应用上下文类型:AnnotationConfigApplicationContext、AnnotationConfigWebApplicationContext、ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebApplcationContext.