Spring详细基本开发流程

文章已托管到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架构 |
![]() |
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 |
|---|
![]() |
| 创建Maven项目 |
![]() |
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.xml、beans.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包依赖关系 |
|---|
![]() |
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详细基本开发流程的更多相关文章
- ActiveMQ整合spring结合项目开发流程(生产者和消费者)总结
一:生产者代码编写: 1.配置pom.xml引入相关坐标 <dependencies> <!-- spring开发测试 --> <dependency> <g ...
- Sencha Touch 2 在MAC下详细的开发流程
在不久的将来我相信Web App会流行的非常广, 能看到未来才能主宰未来.对于我们开发人员来说我觉得想成就一件伟大的事情,需要过硬的技术和好的想法,再加上决不放弃的精神,一定可以成功的. 以下在Mac ...
- spring boot + vue + element-ui全栈开发入门——spring boot后端开发
前言 本文讲解作为后端的spring boot项目开发流程,如果您还不会配置spring boot环境,就请点击<玩转spring boot——快速开始>,如果您对spring boot还 ...
- Vue 框架-12-Vue 项目的详细开发流程
Vue 框架-12-Vue 项目的详细开发流程 首先,如果你还不了解 Vue 脚手架怎么搭建? 默认的环境中有哪些文件? 文件大概是什么作用? 那么,您要先查看之前的文章才有助于你理解本篇文章: Vu ...
- Spring MVC——项目的开发流程
创建项目(IDEA下) 打开IDEA,我们开始创建一个简单的Spring MVC项目,流程如下: 这里要注意一下,我们是基于Maven开发项目,当然是要配置Maven环境的,如果大家之前从来没有配置过 ...
- Spring 定时任务Scheduled 开发详细图文
Spring 定时任务Scheduled 开发 文章目录 一.前言 1.1 定时任务 1.2 开发环境 1.3 技术实现 二.创建包含WEB.xml 的Maven 项目 2.1 创建多模块项目task ...
- MyBatis框架基础详细开发流程
MyBatis 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 一.框架概述 1.1 什么是框架? 软件的半成品,解决了软件开发过程 ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- Thrift项目Server端开发流程
Thrift项目Server端开发流程 首先,先了解工程中所有包的功能(见下图) 该图为用户中心项目的目录结构,以下依次介绍. 1. src/main/java com.framework:该 ...
随机推荐
- CKAD个人考试心得
先晒一波本人的CKA和CKAD证书! 如下正式分享CKAD心得: 考试相关准备: l 练习:https://github.com/dgkanatsios/CKAD-exercises: l 网络:必须 ...
- phpmyadmin通过慢查询日志getshell连载(二)
这是phpmyadmin系列渗透思路的第二篇文章,前面一篇文章阐述了通过全局日志getshell,但是还有一个日志可以getshell,那就是本次实验的慢查询日志,操作类似,毕竟实战中多一条路就多一次 ...
- localStorage. sessionStorage、 Cookie不共同点:(面试题)
●存储大小的不同: localStorage的大小一般为5M sessionStorage的大小一般为5M cookies的大小一般为4K ●有效期不同: 1.localStorage的有效期为永久有 ...
- 【漏洞三】跨站点脚本(XSS)攻击
[漏洞] 跨站点脚本(XSS)攻击 [原因] 跨站点脚本(也称为xss)是一个漏洞,攻击者可以发送恶意代码(通常在(Javascript的形式)给另一个用户.因为浏览器无法知道脚本是否值得信任,所以它 ...
- centos下面基本的linux命令操作
参考视频: 1.如何打开命令窗口 鼠标点击右键,选择open Terminal就可以打开命令行窗口了. 现在我们可以调整这个窗口的大小,增大窗口大小使用ctrl+shif+加号,缩小窗口ctrl+减号 ...
- java中“”==“” equals hashcode的关系
ava中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比 ...
- Flask-install-python2.6
命令: # 安装virtualenv $ sudo yum install python-setuptools $ sudo easy_install virtualenv OR sudo pip i ...
- JavaScript笔记- 函数声明和函数表达式(001)
function 是 Javascript 中的第一类对象,这就意味着函数可以像其他值一样被传递.一个最常见的用法就是将一个匿名函数作为回调函数传递到另外一个异步函数中. 函数声明 ? 1 funct ...
- CentOS 关闭暂不需要的系统服务
需要保留的服务:crond.iptables.irqbalance.microcode_ctl.network.random.sshd.syslog.local 一 .使用命令:ntsysv 打开选项 ...
- h5页面自动播放视频、音频_关于媒体文件自动全屏播放的实现方式
在移动端(ios和android)播放视频的时候,我们即使定义了autoplay属性,仍然不能自动播放.这是由于手机浏览器为了防止浪费用户的网络流量,在默认情况下是不允许媒体文件自动播放的,除非用户自 ...




