天天看点

SSM框架之Spring概述(一)

一、Spring概述

1、Spring

Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(控制反转)和 AOP(面向切面编程)为内核,提供了表示层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。

  • 对于Spring而言,一切Java对象都是Bean。所有的Java对象都交由Spring容器管理。
  • Spring使用XML配置文件(beans.xml)管理容器中的Bean。
  • 在Spring配置文件中配置Bean时,class属性的值必须是Bean实现类的全限定类名,不能是接口,不能是抽象类,否则Spring无法使用反射创建该类的实例。
  • Spring配置文件中还有一个bean元素的子元素<property…/>元素,它驱动Spring以反射方式执行一次setter方法,property的name属性值决定执行哪个setter方法,而property的value(传入参数是基本类型及包装类、String)或 ref(传入参数是其他Bean)属性决定执行setter方法的传入参数。
  • Spring最常用的接口是ApplicationContext,该接口有如下两个实现类:
    • ClassPathXmlApplicationContext:在类加载路径下搜索配置文件,并根据配置文件创建Spring容器。
    • FileSystemXmlApplicationContext:在文件系统的相对路径或绝对路径下搜索配置文件,并根据配置文件创建Spring容器。
  • Spring 容器获取对象的主要两种方法:
    • Object getBean(String id):根据容器中Bean的id来获取指定Bean,获取之后需要进行强制类型转换。
    • T getBean(String name,Class requiredType):根据容器中Bean的id来获取指定Bean,获取之后不进行强制类型转换。

2、Spring的优势

(1)方便解耦,简化开发:通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。

(2)AOP 编程的支持:通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付。

(3)声明式事务的支持:可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。

(4)方便程序的测试:可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。

(5)方便集成各种优秀框架:Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate等)的直接支持。

(6)降低 JavaEE API 的使用难度:Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。

3、Spring的体系结构

SSM框架之Spring概述(一)

二、Spring的IoC

1、控制反转:把创建对象的权利交给框架,是框架的重要特征。它包括依赖注入和依赖查找。

2、IoC的作用:消减计算机程序的耦合(解除我们代码中的依赖关系)。

3、IoC容器的三个基本要点:

(1)应用程序的各组件面向接口编程。将组件间的耦合关系提升到接口层次,有利于扩展。

(2)应用程序的各组件不再由程序主动创建,而是由Spring容器负责生产并初始化。

(3)Spring采用配置文件或注解来管理Bean的实现类、依赖关系,Spring容器则根据配置文件或注解,利用反射来创建实例,并注入依赖关系。

4、依赖注入:当调用者需要调用被依赖对象的方法时,调用者无需主动获取被依赖对象,只要等待Spring容器注入即可。

  • 依赖注入的三种方式:

    (1)设值注入:使用成员变量的setter方法注入被依赖对象。<property…/>子元素

    (2)构造注入:使用构造器注入被依赖对象。<constructor-arg…/>子元素

    (3)接口注入:调用者实现特定接口,并实现该接口的特定方法,IoC容器会自动检测并 调用这个特点的方法,完成依赖注入。

5、Spring容器:

(1)Spring有两个核心接口: BeanFactory 和 ApplicationContext。ApplicationContext是BeanFactory的子接口,功能更强大,使用它作为Spring的容器更方便。

(2)ApplicationContext 的常用实现类有:

  • FileSystemXmlApplicationContext
  • ClassPathXmlApplicationContext
  • AnnotationConfigApplicationContext

    在web应用中常用的实现类:

    • XmlWebApplicationContext
    • AnnotationConfigWebApplicationContext

(3)ApplicationContext 额外的功能:

  • 默认预初始化所有的single Bean ,也可通过配置取消预配置;
  • 继承MessageSource接口,提供国际化支持;
  • 资源访问,比如访问URL和文件;
  • 事件机制;
  • 同时加载多个配置文件;
  • 以声明式方式启动并创建Spring容器。

(4)ApplicationContext 的国际化支持

  • MessageSource接口的两个国际化方法:
    • String getMessage(String code, Object[] args, Locale loc)
    • String getMessage(String code, Object[] args, String default, Locale loc)

(5)ApplicationContext 的事件机制

SSM框架之Spring概述(一)

Spring的事件框架有如下两个重要成员:

  • ApplicationEvent:容器事件,必须由ApplicationContext发布。ctx.publishEvent(ele);
  • ApplicationListener:监听器,可由容器中的任何监听器Bean担任,只要该Bean实现了该接口即可。