Java单体应用 - 常用框架 - 02.Spring

原文地址:http://www.work100.net/training/monolithic-frameworks-spring.html
更多教程:光束云 - 免费课程

Spring

序号 文内章节 视频
1 概述 -
2 体系结构 -
3 特点 -
4 Spring与IoC -
5 第一个Spring应用程序 -

请参照如上章节导航进行阅读

1.概述

Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。

根据功能的不同,可以将一个系统中的代码分为 主业务逻辑系统级业务逻辑 两类,它们各自具有鲜明的特点:

  • 主业务代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低;
  • 系统级业务相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等,复用性强。

Spring 根据代码的功能特点,将降低耦合度的方式分为了两类:IoCAOP

  • IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”。
  • 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。

Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。
Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。

简单来说,Spring 是一个分层的 Java SE/EE full-stack(一站式)轻量级开源框架。

2.体系结构

Spring 由 20 多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、应用服务器设备管理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test)。

3.特点

非侵入式

所谓非侵入式是指,Spring 框架的 API 不会在业务逻辑上出现,即业务逻辑是 POJO。
由于业务逻辑中没有 Spring 的 API,所以业务逻辑可以从 Spring 框架快速的移植到其他框架, 即与环境无关。

容器

Spring 作为一个容器,可以管理对象的生命周期、对象与对象之间的依赖关系。可以通过配置文件,来定义对象,以及设置与其他对象的依赖关系。

IoC

控制反转(Inversion of Control),即创建被调用者的实例不是由调用者完成,而是由 Spring 容器完成,并注入调用者。

当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。即,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

AOP

面向切面编程(AOP,Aspect Orient Programming),是一种编程思想,是面向对象编程 OOP 的补充。很多框架都实现了对 AOP 编程思想的实现。Spring 也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如日志和事务管理)进行开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持。

我们可以把日志、安全、事务管理等服务理解成一个“切面”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好:首先业务逻辑不纯净;其次这些服务被很多业务逻辑反复使用,完全可以剥离出来做到复用。那么 AOP 就是这些问题的解决方案, 可以把这些服务剥离出来形成一个“切面”,以期复用,然后将“切面”动态的“织入”到业务逻辑中,让业务逻辑能够享受到此“切面”的服务。

4.Spring与IoC

控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。

IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种: 依赖注入和依赖查找。依赖注入方式应用更为广泛。

  • 依赖查找:Dependency Lookup,DL,容器提供回调接口和上下文环境给组件,程序代码则需要提供具体的查找方式。比较典型的是依赖于 JNDI 系统的查找。
  • 依赖注入:Dependency Injection,DI,程序代码不做定位查询,这些工作由容器自行完成。

依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持 POJO 之间依赖关系的管理。

依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。

5.第一个Spring应用程序

5.1.构建项目结构

创建一个文件夹为 hello-spring 的项目,然后增加 pom.xml 文件,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.work100.training.stage2</groupId>
    <artifactId>hello-spring</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>
</project>

增加 org.springframework:spring-context 依赖

然后构建项目结构,并将 pom.xml 文件托管到 Maven,如下图:

5.2.代码实现

创建 UserService 接口

UserService.java 文件代码如下:

package net.work100.training.stage2.hello.spring.service;

/**
 * <p>Title: UserService</p>
 * <p>Description: </p>
 *
 * @author liuxiaojun
 * @date 2020-02-12 13:32
 * ------------------- History -------------------
 * <date>      <author>       <desc>
 * 2020-02-12   liuxiaojun     初始创建
 * -----------------------------------------------
 */
public interface UserService {
    void sayHi();
}

创建 UserServiceImpl 实现

UserServiceImpl.java 文件代码如下:

package net.work100.training.stage2.hello.spring.service.impl;

import net.work100.training.stage2.hello.spring.service.UserService;

/**
 * <p>Title: UserServiceImpl</p>
 * <p>Description: </p>
 *
 * @author liuxiaojun
 * @date 2020-02-12 13:32
 * ------------------- History -------------------
 * <date>      <author>       <desc>
 * 2020-02-12   liuxiaojun     初始创建
 * -----------------------------------------------
 */
public class UserServiceImpl implements UserService {
    public void sayHi() {
        System.out.println("Hello Spring");
    }
}

5.3.配置 Spring

src/main/resources 目录下创建 spring-context.xml 配置文件,从现在开始类的实例化工作交给 Spring 容器管理(IoC),配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="net.work100.training.stage2.hello.spring.service.impl.UserServiceImpl" />
</beans>

5.4.测试 Spring IOC

创建一个 MyTest 测试类,测试对象是否能够通过 Spring 来创建,代码如下:

package net.work100.training.stage2.hello.spring;

import net.work100.training.stage2.hello.spring.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * <p>Title: MyTest</p>
 * <p>Description: </p>
 *
 * @author liuxiaojun
 * @date 2020-02-12 13:35
 * ------------------- History -------------------
 * <date>      <author>       <desc>
 * 2020-02-12   liuxiaojun     初始创建
 * -----------------------------------------------
 */
public class MyTest {
    public static void main(String[] args) {
        // 获取 Spring 容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");

        // 从 Spring 容器中获取对象
        UserService userService = (UserService)applicationContext.getBean("userService");
        userService.sayHi();
    }
}

5.5.运行

运行结果如下:

Hello Spring

5.6.源码获取

实例源码已经托管到如下地址:



上一篇:Bootstrap

下一篇:JUnit


如果对课程内容感兴趣,可以扫码关注我们的 公众号QQ群,及时关注我们的课程更新


原文地址:https://blog.51cto.com/14735583/2479105

时间: 2024-10-29 19:13:26

Java单体应用 - 常用框架 - 02.Spring的相关文章

Java单体应用 - 常用框架 - 07.Spring MVC - Maven 模块化开发(iot-

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-maven-module.html更多教程:光束云 - 免费课程 Maven 模块化开发 序号 文内章节 视频 1 概述 - 2 创建根项目(工程) - 3 创建统一的依赖管理模块 - 4 创建通用的工具类模块 - 5 创建领域模型模块 - 6 创建管理后台模块 - 7 创建前端控制台模块 - 8 创建接口模块 - 9 清理.编译.打包 - 10 功能完善

Java单体应用 - 常用框架 - 07.Spring MVC - 表单标签库

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-form-tags.html更多教程:光束云 - 免费课程 表单标签库 序号 文内章节 视频 1 声明表单标签 - 2 表单标签 - 3 文本框 - 4 密码框 - 5 文本域 - 6 复选框 - 7 复选框(多选) - 8 单选按钮 - 9 单选按钮(多选) - 10 下拉列表 - 11 下拉列表(多选) - 12 隐藏域 - 请参照如上章节导航进行阅读

Java单体应用 - 常用框架 - 07.Spring MVC - 项目重构(iot-admin3)

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-iot-admin3.html更多教程:光束云 - 免费课程 项目重构(iot-admin3) 序号 文内章节 视频 1 概述 - 2 配置和结构重构 - 3 Controller控制器重构 - 4 使用拦截器 - 5 实例源码 - 请参照如上章节导航进行阅读 1.概述 我们继续以上一章节 Spring Web 中的案例项目 iot-admin2 为基础,复

Java单体应用 - 常用框架 - 07.Spring MVC - 其它注解

原文地址:http://www.work100.net/training/monolithic-frameworks-spring-mvc-other-annotation.html更多教程:光束云 - 免费课程 其它注解 序号 文内章节 视频 1 @ModelAttribute - 2 @ResponseBody - 请参照如上章节导航进行阅读 [email protected] @ModelAttribute 具有如下三个作用: 绑定请求参数到命令对象: 放在功能处理方法的入参上时,用于将多

Java单体应用 - 常用框架 - 05.综合实例(iot-admin)

原文地址:http://www.work100.net/training/monolithic-frameworks-example.html更多教程:光束云 - 免费课程 综合实例 序号 文内章节 视频 1 概述 - 2 创建项目 - 3 使用AdminLTE模板 - 4 创建登录页 - 5 登录功能实现 - 6 提升用户体验 - 7 实例源码 - 请参照如上章节导航进行阅读 1.概述 本节将把「Java单体应用」课程做一个阶段性的总结,通过一个综合的案例将所学知识完整实践一下. 我们后续阶段

Java十大常用框架介绍(spring系+dubbo+RabbitMQ+Ehcache+redis)

一.SpringMVC Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的. 模型(Model )封装了应用程序的数据和一般他们会组成的POJO. 视图(View)是负责呈现模型数据和一般它生成的HTML输出,客户端的浏览器能够解释. 控制器(Contro

Java单体应用 - 常用框架 - 08.MyBatis - Druid 简介

原文地址:http://www.work100.net/training/monolithic-frameworks-mybatis-druid.html 更多教程:光束云 - 免费课程 Druid 简介 序号 文内章节 视频 1 概述 - 2 各种连接池性能对比测试 - 请参照如上章节导航进行阅读 1.概述 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和 SQL 解析器组成. 该项目主要是为了扩展 JDBC 的一些限制,可以让程序员实现一些特殊的需求,比如向密钥

Java单体应用 - 常用框架 - 08.MyBatis

原文地址:http://www.work100.net/training/monolithic-frameworks-mybatis.html 更多教程:光束云 - 免费课程 MyBatis 简介 序号 文内章节 视频 1 什么是MyBatis - 2 MyBatis体系结构 - 3 MyBatis的工作流程 - 4 MyBatis与Hibernate - 5 MyBatis的特点 - 请参照如上章节导航进行阅读 1.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 S

Java单体应用 - 常用框架 - 01.Bootstrap

原文地址:http://www.work100.net/training/monolithic-frameworks-bootstrap.html 更多教程:光束云 - 免费课程 Bootstrap 序号 文内章节 视频 1 概述 2 阅读对象 3 前置知识 4 为什么使用Bootstrap 5 Bootstrap包的内容 6 参考资源 请参照如上章节导航进行阅读 1.概述 Bootstrap 来自 Twitter,是目前很受欢迎的前端框架. Bootstrap 是基于 HTML.CSS.Jav