zoukankan      html  css  js  c++  java
  • Spring详细基本开发流程

    LOGO
    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特点
    Spring架构
    001
    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
    image-20200712164104354
    创建Maven项目
    image-20200712164221187
    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
    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文件位置,用以描述标签语义、属性、取值范围等
  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/ziph/p/13291473.html
Copyright © 2011-2022 走看看