Spring学习笔记 - 第002天

Spring 详解

概述

Spring是Java企业级开发的一站式选择,它的出现终结了重量级Java企业开发技术(EJB 2.x)的时代。Spring使用了更简单、更轻量级的编程模型,使得基于POJO开发Java企业级应用成为可能,同时也影响了Java EE技术的发展方向,今天的EJB中也提供了依赖注入和面向切面编程等理念,这些都是受Spring的启发和影响。今天的Spring框架已经涉及到移动开发、社交API集成、NoSQL、云计算、大数据等很多领域,为简化Java开发做出了极大的贡献。

Spring在降低企业级开发复杂性上做了以下工作:
1.基于POJO的轻量级和最小侵入性编程;
2.通过依赖注入和面向接口编程实现解耦合;
3.基于切面和约定(惯例)实现声明式编程;
4.通过切面和模板减少乏味的代码。

POJO

Spring不强迫你实现Spring的接口或继承Spring的类,应用中可以没有Spring的痕迹。Spring赋予POJO魔力的方式之一就是通过依赖注入来完成对象的装配。

依赖注入(DI)

通过DI,对象无需自行创建或管理它们的依赖关系,依赖关系将会被自动注入到需要它们的对象当中去。

面向切面编程(AOP)

DI能够让相互协作的软件组件保持松散耦合,而AOP允许你把遍布应用各个角落的功能分离出来形成可重用的组件。系统通常由许多不同的组件构成,每一个组件都负责一项特定的功能,但是除了核心功能外,这些组件通常还需要诸如日志、事务管理和安全这样的额外职责,这些服务通常被称为横切关注点,因为它们会跨越多个组件。如果这些关注点分散到多个组件中去,你的代码维护起来就会非常头疼,而且逻辑会变得相当混乱。
AOP通过声明的方式将服务模块应用到需要这些服务的组件中,从而保证了POJO的简单性。

风景线

  • 核心容器:最核心的部分,管理Bean的创建、配置和管理。
BeanFactory
AnnotationConfigApplicationContext
AnnotationConfigWebApplicationContext
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext
  • AOP模块:通过AOP可以将遍布系统各个角落的横切关注功能(事务和安全)从它们所作用的对象中解耦合出来
  • 数据访问和集成:直接使用JDBC访问数据库会导致大量的样板代码,Spring封装的JDBC和DAO模块抽象了这些样板代码;另外Spring提供了对ORM的支持,可以集成Hibernate、MyBatis、JDO等ORM框架并为其提供事务管理支持。
  • Web模块:Spring提供了对表示层MVC框架的集成,自己也提供了非常强大的MVC框架;同时Spring对实现REST API也提供了很好的支持。
  • 测试模块:对单元测试以及mock都提供了很好的支持。
  • Spring Web Flow:对基于流程的会话式Web应用提供了支持。
  • Spring Web Service:契约优先的Web Service模型。
  • Spring Batch:开发批处理应用,如对数据进行大量操作。
  • Spring Data:让Spring中使用关系型数据库和NoSQL(文档数据库、图数据库)都变得很容易,为JPA开发提供了简化。
  • Spring Social:社交网络扩展模块(注意针对Facebook或Twitter)。
  • Spring Mobile:支持移动Web应用开发的模块。
  • Spring Boot:简化众多编程任务,消除大量样板代码,使用自动配置技术简化Spring。

4.x新功能

  • 对WebSocket的支持
  • 在WebSocket基础上提供了基于SockJS的面向消息的编程模型,包含了对STOMP协议的支持
  • 支持Java 8的新特性
  • 支持完全采用Groovy开发Spring应用程序
  • 条件化创建Bean的功能
  • 对多项JEE规范的支持,包括JMS 2.0、JTA 1.2、JPA 2.1和Bean Validation 1.1

IoC容器

  • Spring配置的可选方案:
    1.在XML中进行显式配置
    2.在Java中进行显式配置
    3.隐式的Bean发现和自动装配机制

  • 依赖注入方式:
    1.构造器注入
    2.setter注入
    3.接口注入

说明:Spring中支持前两种注入方式。对于对象的必要属性建议用构造器注入;而对象的非必要属性推荐使用setter注入

使用AOP

  • 什么是AOP

  • AOP的术语:
    1.Advice(通知/增强)
    2.JoinPoint(连接点)
    3.PointCut(切点)
    4.Aspect(切面)
    5.Introdution(引入)
    6.Weaving(织入)

  • Spring对AOP的支持
    1.基于代理
    2.纯POJO切面
    3.@AspectJ注解驱动的切面
    4.注入式AspectJ切面

Spring注解

@Scope("prototype")
@EnableAspectJAutoProxy 切面需要用到代理
@Primary 首选

面向切面编程有很多种实现方案
AspectJ - Xerox - 施乐
@Aspect

你可能感兴趣的:(Spring学习笔记 - 第002天)