《Spring实战》学习笔记之一:Spring之旅

  在Java近20年的发展中,有很多创新,但也有一些粗糙的产品,如applet、企业级JavaBean(EJB)、Java数据对象(Java Data Object),以及无数的日志框架。
  最初,Spring的主要目的便是要代替重量级的企业级Java技术,尤其是EJB。它提供了轻量级的编程模型,增强了老式简单Java对象(POJO)的功能,使其具备了EJB级别的能力。
1.1简化Java开发
Spring采取了4种关键策略:
①基于POJO的轻量级和最小侵入性编程;
②通过依赖注入和面向接口实现松耦合;
③基于切面和惯例进行声明式编程;
④通过切面和模板减少样板式代码。
  许多框架,比如EJB,要求应用必须要继承它的接口或类,这样就导致应用与框架绑死。这种方式属于侵入式编程。
  而Spring一般最坏的情况也不过是使用了它的注解而已。它使用DI(依赖注入)来实现松耦合。
  DI能够让相互协作的软件组件保持松散耦合;而面向切面编程(Aspect Oriented Programming,AOP)允许把遍布应用各处的功能分离出来形成可重用的组件。
  DI和AOP的效果:DI的效果是使用者(宿主类)不用去关心注入的依赖类具体的子类型和版本;AOP的效果是使用者不需要再去管理需要用到的功能类和功能方法。(范培忠)
  AOP的理解:在不改变业务类的源代码的情况下(其实大部分情况你也拿不到),对业务类实现功能上的增强,比如给所有的业务类增加事务支持。
  切面、切入点的理解:切面(aspect)就是所需要增强的共性功能,比如所有的类都需要日志记录功能,就是一个切面;切入点(pointcut)就是业务类与切面碰撞的时机,比如所有的类都需要日志记录功能,当它需要日志记录的时机,就是一个切入点。如下图所示。(范培忠)
《Spring实战》学习笔记之一:Spring之旅
《Spring实战》学习笔记之一:Spring之旅
  定义切入点的表达式叫做AspectJ;在进入切入点前需要执行某项工作的声明,叫做前置通知,同理也有后置通知。
  模板方法:Spring还提供模板类来简化自己编写的冗长的模板式代码。例如你使用jdbc进行查询的代码,需要写很多如建立连接、事务和容错等几乎一模一样的内容。Spring提供JdbcTemplate类来简化你的开发。(其实模板方法本身也是一种设计模式,它是可以部分取代AOP的一种简单而原始的实现方法,如下图)
《Spring实战》学习笔记之一:Spring之旅

1.2容纳你的bean
  容器是Spring的核心,容器使用DI管理组件。Spring自带多种容器实现,主要是bean工厂(BeanFactory接口)和上下文(ApplicationContext接口)两种。普遍使用ApplicationContext。
  Spring自带ApplicationContext接口实现如下:
  • AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文。
  • AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文。
  • ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
  • FileSystemXmlapplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义。
  • XmlWebApplicationContext:从Web应用下的一个或多个XML配置文件中加载上下文定义。
《Spring实战》学习笔记之一:Spring之旅
《Spring实战》学习笔记之一:Spring之旅
《Spring实战》学习笔记之一:Spring之旅
《Spring实战》学习笔记之一:Spring之旅
《Spring实战》学习笔记之一:Spring之旅
  上下文创建好后,就可以使用getBean()方法获取bean。
  PS:默认情况下,Spring中的bean都是单例的。

1.3Spring全貌
《Spring实战》学习笔记之一:Spring之旅
1.4 Spring4.0新特性
①WebSocket的高层次封装SockJS;②基于SockJS的新消息模块;③Java8支持;④新的Date与Time API,比java.util.Date和java.util.Calendar更丰富;⑤条件化创建bean的功能;⑥Spring RestTemplate的新异步实现;
(本章完)