Spring详细基本开发流程


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特点
![](/media/images/blog/ab17880bda65c913f0434370b8ecc9af.webp)Spring特点
**Spring架构**
![](/media/images/blog/4242d197fd4624f025adf2dee860385e.png)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
![](/media/images/blog/29b83e633d7faf0f38b51c7885d52208.png)image-20200712164104354
**创建Maven项目**
![](/media/images/blog/433ec4c0e9b8bdf04048fcb85ce49318.png)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知道你要生产的对象是谁

标签:

<?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包依赖关系
![](/media/images/blog/68540c6281c5470485ef35407bdd7e23.png)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文件位置,用以描述标签语义、属性、取值范围等


原文链接:https://www.cnblogs.com/ziph/p/13291473.html