LOGO

文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!
搜索关注微信公众号 码出Offer 领取各种学习资料!

一、Spring概述

1.1 Web开发中的一些问题

  • 传统Web开发存在硬编码所造成的过度程序耦合(例如:Service中作为属性Dao对象)
  • 部分Java EE API较为复杂,使用效率低(例如:JDBC开发步骤)
  • 侵入性强,移植性差(例如:DAO实现的更换,从Connection到SqlSession)

1.2 什么是Spring?

  • Spring 是一个开源的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用
  • Spring是众多优秀设计模式的组合(工厂、单例、代理、适配器、包装器、观察者、模板、策略)
  • Spring并未替代现有框架产品,而是将众多框架进行有机整合,简化企业级开发,俗称"胶水框架"

1.3 官网

官方网站:https://spring.io/

GitHub:https://github.com/spring-projects

下载地址:http://repo.spring.io/release/org/springframework/spring/

1.4 Spring架构组成

Spring架构由诸多模块组成,可分类为

  • 核心技术:依赖注入 ,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP
  • 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
  • 数据访问:事务 ,DAO支持,JDBC,ORM,封装XML。
  • Spring MVC和 Spring WebFlux Web框架。
  • 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
  • 语言:Kotlin,Groovy,动态语言。
Spring特点

Spring特点
Spring架构

001

1.5 Spring依赖

GroupId ArtifactId 说明
org.springframework spring-beans Beans 支持,包含 Groovy
org.springframework spring-aop 基于代理的AOP支持
org.springframework spring-aspects 基于AspectJ 的切面
org.springframework spring-context 应用上下文运行时,包括调度和远程抽象
org.springframework spring-context-support 支持将常见的第三方类库集成到 Spring 应用上下文
org.springframework spring-core 其他模块所依赖的核心模块
org.springframework spring-expression Spring 表达式语言,SpEL
org.springframework spring-instrument JVM 引导的仪表(监测器)代理
org.springframework spring-instrument-tomcat Tomcat 的仪表(监测器)代理
org.springframework spring-jdbc 支持包括数据源设置和 JDBC 访问支持
org.springframework spring-jms 支持包括发送/接收JMS消息的助手类
org.springframework spring-messaging 对消息架构和协议的支持
org.springframework spring-orm 对象/关系映射,包括对 JPA 和 Hibernate 的支持
org.springframework spring-oxm 对象/XML 映射(Object/XML Mapping,OXM)
org.springframework spring-test 单元测试和集成测试支持组件
org.springframework spring-tx 事务基础组件,包括对 DAO 的支持及 JCA 的集成
org.springframework spring-web web支持包,包括客户端及web远程调用
org.springframework spring-webmvc REST web 服务及 web 应用的 MVC 实现
org.springframework spring-webmvc-portlet 用于 Portlet 环境的MVC实现
org.springframework spring-websocket WebSocket 和 SockJS 实现,包括对 STOMP 的支持
org.springframework spring-jcl Jakarta Commons Logging 日志系统

二、自定义工厂

编写一个读取Spring配置文件并创建对象的工厂,了解Spring工厂创建对象的流程,以便使用自定义工厂来测试Spring基本开发流程

package com.mylifes1110.factory;

import java.io.IOException;
import java.util.Properties;

/**
 * @ClassName MyFactory
 * @Description 自定义工厂(创建对象)
 * @Author Ziph
 * @Date 2020/7/12
 * @Since 1.8
 * @Version 1.0
 */

public class MyFactory {
    private Properties properties = new Properties();

    public MyFactory() {
    }

    public MyFactory(String config) throws IOException {
        // 加载配置文件
        properties.load(MyFactory.class.getResourceAsStream(config));
    }

    // 获取对象
    public Object getBean(String beanName) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        String classPath = properties.getProperty(beanName);
        if (classPath != null) {
            Class clazz = null;
            clazz = Class.forName(classPath);
            return clazz.newInstance();
        }
        return null;
    }
}

三、Spring基本开发步骤

3.1 创建Maven项目

如果对Maven不了解的小伙伴可以参考Maven教程

File -> NewProject

image-20200712164104354
创建Maven项目

image-20200712164221187

3.2 引入依赖

在pom.xml文件中引入Spring常用依赖

<dependencies>
    <!-- Spring常用依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.1.6.RELEASE</version>
    </dependency>
</dependencies>

3.3 创建Spring空配置文件

在resources文件夹中创建一个名为spring-context.xml,命名并无规定,还有其他的常用命名,比如:applicationContext.xmlbeans.xml

<?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">

</beans>

3.4 定义需要生产的Bean对象

定义一个Bean对象、生产该对象并测试该对象内的方法(UserDaoImpl)

package com.mylifes1110.dao.impl;

import com.mylifes1110.bean.User;
import com.mylifes1110.dao.UserDao;

public class UserDaoImpl implements UserDao {

    @Override
    public int insertUser(User user) {
        System.out.println("------insertUser and UserDao------");
        return 0;
    }
}

3.5 基本依赖注入

依赖注入在这里可以把它理解为将要生产的对象注入到Spring容器中,也就是在spring-context.xml文件利用标签注入,这样就可以让Spring知道你要生产的对象是谁

标签: <bean id="唯一标签" class="需要被创建的目标对象全限定名"/>

<?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="UserDao" class="com.mylifes1110.dao.impl.UserDaoImpl"/>

</beans>

3.6 调用Spring工厂创建对象

调用Spring工厂API接口ApplicationContext读取配置Spring核心配置文件并创建工厂对象

package com.mylifes1110.dao;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserDaoImplTest {
    /**
     * @MethodName insertUser
     * @Param []
     * @Description 测试使用Spring工厂获取对象
     * @Author Ziph
     * @Date 2020/7/12
     */
    @Test
    public void insertUser() {
        // 读取配置文件所需创建对象中所需创建的bean对象并获取spring工厂对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
        // 通过注入时的唯一标识(id)获取bean对象
        UserDao userDao = (UserDao) context.getBean("UserDao");
        // 使用对象
        userDao.insertUser(null);    // 输出结果为:------insertUser and UserDao------
    }
}

四、依赖与配置文件详解

4.1 Spring的依赖关系

Spring框架包含多个模块,每个模块各司其职,可结合需求引入相关依赖Jar包实现功能。

注意: Jar包彼此存在依赖,只需引入最外层Jar即可由Maven自动将相关依赖Jar引入到项目中。

Spring常用功能的Jar包依赖关系

image-20191230164517693

4.2 schema

配置文件中的顶级标签中包含了语义化标签的相关信息(spring-context.xml头文件即是schema)

注意: Spring需要导入的schema标签是很有规律的,因为Spring是特别规范的。例如:如下context别名的schema标签是我自己复制修改的,它也是我们所用到Spring的schema,你可以复制beans的schema来替换所有beans的关键字即可,但是记得复制全(注意查看三个有context标志标签语句,另外“ : ”后面的是别名哦)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:context="http://www.springframework.org/schema/context"

       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

       http://www.springframework.org/schema/context http://www.springframework.org/schema/beans/spring-context.xsd">

</beans>
schema名称 描述
xmlns 语义化标签所在的命名空间
xmlns:xsi XMLSchema-instance 标签遵循Schema标签标准
xsi:schemaLocation xsd文件位置,用以描述标签语义、属性、取值范围等

Spring详细基本开发流程的更多相关文章

  1. ActiveMQ整合spring结合项目开发流程(生产者和消费者)总结

    一:生产者代码编写: 1.配置pom.xml引入相关坐标 <dependencies> <!-- spring开发测试 --> <dependency> <g ...

  2. Sencha Touch 2 在MAC下详细的开发流程

    在不久的将来我相信Web App会流行的非常广, 能看到未来才能主宰未来.对于我们开发人员来说我觉得想成就一件伟大的事情,需要过硬的技术和好的想法,再加上决不放弃的精神,一定可以成功的. 以下在Mac ...

  3. spring boot + vue + element-ui全栈开发入门——spring boot后端开发

    前言 本文讲解作为后端的spring boot项目开发流程,如果您还不会配置spring boot环境,就请点击<玩转spring boot——快速开始>,如果您对spring boot还 ...

  4. Vue 框架-12-Vue 项目的详细开发流程

    Vue 框架-12-Vue 项目的详细开发流程 首先,如果你还不了解 Vue 脚手架怎么搭建? 默认的环境中有哪些文件? 文件大概是什么作用? 那么,您要先查看之前的文章才有助于你理解本篇文章: Vu ...

  5. Spring MVC——项目的开发流程

    创建项目(IDEA下) 打开IDEA,我们开始创建一个简单的Spring MVC项目,流程如下: 这里要注意一下,我们是基于Maven开发项目,当然是要配置Maven环境的,如果大家之前从来没有配置过 ...

  6. Spring 定时任务Scheduled 开发详细图文

    Spring 定时任务Scheduled 开发 文章目录 一.前言 1.1 定时任务 1.2 开发环境 1.3 技术实现 二.创建包含WEB.xml 的Maven 项目 2.1 创建多模块项目task ...

  7. MyBatis框架基础详细开发流程

    MyBatis 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 一.框架概述 1.1 什么是框架? 软件的半成品,解决了软件开发过程 ...

  8. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  9. Thrift项目Server端开发流程

    Thrift项目Server端开发流程 首先,先了解工程中所有包的功能(见下图) 该图为用户中心项目的目录结构,以下依次介绍. 1.     src/main/java com.framework:该 ...

随机推荐

  1. Docker巨轮的航行之路-基础知识篇

    一.什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中 ...

  2. conda 切换为国内源

    添加清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda con ...

  3. 拒绝降权!教你用 Python 确保制作的短视频独一无二

    1. 场景 前段时间有人私信我,说自己辛辛苦苦剪辑的短视频,上传到某平台后,由于播放量太大,收到 降权 的通知,直接导致这个账号废掉了! 其实,各大视频平台都有自己的一套鉴别算法,针对视频的二次创作, ...

  4. ca77a_c++__一个打开并检查文件输入的程序_流对象_操作文件

    /*ca77a_c++__一个打开并检查文件输入的程序 习题:8.13 8.14*/ /*ca77a_c++__一个打开并检查文件输入的程序 习题:8.13 8.14 */ #include < ...

  5. 认证授权方案之JwtBearer认证

    1.前言 回顾:认证方案之初步认识JWT 在现代Web应用程序中,即分为前端与后端两大部分.当前前后端的趋势日益剧增,前端设备(手机.平板.电脑.及其他设备)层出不穷.因此,为了方便满足前端设备与后端 ...

  6. 漏洞复现-Office远程代码执行漏洞 (CVE-2017-11882&CVE-2018-0802)

    漏洞原理 这两个漏洞本质都是由Office默认安装的公式编辑器(EQNEDT32.EXE)引发的栈溢出漏洞(不要问什么是栈溢出,咱也解释不了/(ㄒoㄒ)/~~) 影响版本 Office 365 Mic ...

  7. Linux下搭建redis(源码编译)

    [准备环境] Linux centos7 redis下载包  地址:http://www.redis.cn/download.html  前往下载稳定版本 [步骤] 1.下载成功后 把包上传到服务器 ...

  8. Java中时间处理

    旧 API:位于 java.util 包中,里面主要有 Date.Calendar.TimeZone 类 新 API:位于 java.time 包中,里面主要有 LocalDateTime.Zoned ...

  9. Redis快照原理详解

    本文对Redis快照的实现过程进行介绍,了解Redis快照实现过程对Redis管理很有帮助. Redis默认会将快照文件存储在Redis当前进程的工作目录中的dump.rdb文件中,可以通过配置dir ...

  10. chromedp入门

    chromedp入门 chromedp是什么? chromedp是go写的,支持Chrome DevTools Protocol 的一个驱动浏览器的库.并且它不需要依赖其他的外界服务(比如 Selen ...