Spring简介:特性与架构详说明

本文最后更新于:1 年前

传统web程序及缺点

传统程序开发步骤

传统web项目开发中的耦合度问题

  • 在 Servlet 中调用 service 中的方法,则需要在Servlet类中通过new关键字创建Service的实例:

    1
    2
    3
    public interface ProductService{
    public List<Product> listProducts();
    }
    1
    2
    3
    4
    5
    public class ProductServiceImpl1 implements ProductService{
    public List<Product> listProducts(){
    //查询热销商品
    }
    }
    1
    2
    3
    4
    5
    public class ProductServiceImpl2 implements ProductService{
    public List<Product> listProducts(){
    //查询好评商品
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class ProductListServlet extends HttpServlet{

    //在servlet中使用new关键字创建ProductServiceImpl1对象,增加了servlet和service的耦合度
    private ProductService productService = new ProductServiceImpl1();

    protected void doGet(HttpServletRequest request,HttpServletResponse response){
    doPost(request,response);
    }
    protected void doPost(HttpServletRequest request,HttpServletResponse response){
    productService.listProducts();
    }
    }
  • 在service实现类中需要调用DAO中的方法,也需要在servcie实现类通过new关键字创建DAO实现类对象;

  • 如果使用new关键字创建对象:

    • 失去了面向接口编程的灵活性
    • 代码的侵入性增强(增加了耦合度)、降低了代码的灵活性
    • 增强项目的扩展性

解决方案

面向接口编程

在Servlet中定义Service接口的对象变量,不使用new关键字创建实现类对象,在servlet的实例化的时候,通过反射动态的给Service对象变量赋值。

如何实现?Spring可以做到!!!

Spring 简介

官网: https://spring.io/

Spring是一个轻量级的控制反转和面向切面的容器框架用来解决企业项目开发的复杂度问题——解耦

Spring 特性说明

  • 轻量级:体积小,对代码没有侵入性。
  • 控制反转:IoC(Inverse of Control)。把创建对象的工作交由Spring完成,Spring在创建对象的时候同时可以完成对象属性赋值(DI),即依赖注入。
  • 面向切面:AOP(Aspect Oriented Programming)面向切面编程,可以在不改变原有业务逻辑的情况下实现对业务的增强。
  • 容器:实例的容器,管理创建的对象。

Spring 架构详解

架构图

Core Container

Spring的容器组件,用于完成实例的创建和管理。

  • core:Spring的核心
  • beans:实例管理
  • context:容器上下文

AOP、Aspects

Spring AOP组件,实现面向切面编程。

  • aop
  • aspects

Web

Spring Web组件实际指的是SpringMVC框架,实现web项目的MVC控制。

  • web:Spring对web项目的支持
  • webmvc:SpringMVC组件

Data Access

Spring数据访问组件,也是一个基于JDBC封装的持久层框架。(即使没有mybatis,Spring也可以完成持久化操作)

  • tx

Test

Spring的单元测试组件,提供了Spring环境下的单元测试支持。

  • test