• Spring全家桶的深入学习(一):Spring起步


    背景

    • Spring早已经成为企业级开发的业界标准,尤其是Spring Boot 2.0、Spring 5发布后,Spring的生态系统引领了技术架构发展的潮流,对于Java开发人员,深入掌握Spring全家桶的各种框架应用及必要的底层原理知识,是一件非常重要的事情。

    学习路线图

    在这里插入图片描述

    Spring的基础知识

    什么是Spring

    Spring的核心是提供了一个容器(container),通常称为Spring应用上下文(Spring application context),它们会创建和管理应用组件。这些组件也可以称为bean,会在Spring应用上下文中装配在一起,从而形成一个完整的应用程序。
    在这里插入图片描述

    将bean装配在一起的行为是通过一种基于依赖注入(dependency injection,DI)的模式实现的。此时,组件不会再去创建它所依赖的组件并管理它们的生命周期,使用依赖注入的应用依赖于单独的实体(容器)来创建和维护所有的组件,并将其注入到需要它们的bean中。通常,这是通过构造器参数和属性访问方法来实现的。

    Spring框架核心模块

    在这里插入图片描述

    SpringBoot

    在历史上,一般通过两种配置方式为Spring应用上下文提供Bean

    1. 使用一个或多个XML文件描述bean
    2. 使用@Configuration注解会告知Spring这是一个配置类

    随着Spring Boot 2.x的引入,Spring自动配置的能力已经大大加强,Spring Boot能够基于类路径中的条目、环境变量和其他因素合理猜测需要配置的组件并将它们装配在一起。Java程序员尽可能多地使用Spring Boot,只有在必要的时候才使用显式配置。

    第一个Spring应用DEMO
    1. 在IntelliJ IDEA中创建新项目
      在这里插入图片描述
    2. 通过地址为https://start.spring.io/初始化项目;
      在这里插入图片描述
    3. 指定项目通用信息:
      在这里插入图片描述
    4. 选择项目Starter:
      在这里插入图片描述
    5. 生成的项目结构:
      在这里插入图片描述
    6. maven规范
    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    可参见本人博客《Maven POM( Project Object Model,项目对象模型 )》《一图说清maven常见要素》这两篇文章。

    1. 入口类
    /**
    * SpringBoot应用
    */
    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            // 运行应用
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }
    

    @SpringBootApplication是一个组合注解,它组合了3个其他的注解。

    • @SpringBootConfiguration:将该类声明为配置类。尽管这个类目前还没有太多的配置,但是后续我们可以按需添加基于Java的Spring框架配置。这个注解实际上是@Configuration注解的特殊形式。
    • @EnableAutoConfiguration:启用Spring Boot的自动配置。我们随后会介绍自动配置的更多功能。就现在来说,我们只需要知道这个注解会告诉SpringBoot自动配置它认为我们会用到的组件。
    • @ComponentScan:启用组件扫描。这样我们能够通过@Component@Controller、@Service这样的注解声明其他类,Spring会自动发现它们并将它们注册为Spring应用上下文中的组件。

    在这里插入图片描述
    8. 测试类

    // SpringBoot测试
    @SpringBootTest
    class DemoApplicationTests {
    
        // 测试方法
        @Test
        void contextLoads() {
        }
    
    }
    
    • 程序启动
      在这里插入图片描述
    编写自己的第一个SpringMVC例子
    • 第一个Controller

    index()是一个简单的控制器方法。它带有@GetMapping注解,表明如果针对“/”发送HTTP GET请求,那么这个方法将会处理请求。该方法所做的只是返回String类型的index值,该控制器方法中还通过Spring自动注入IndexService服务组件,及调用服务组件方法。

    /**
     * 第一个SpringMVC程序--Controller层
     *
     * @author zhuhuix
     * @date 2020-07-02
     */
    @Controller
    public class IndexController {
    	// Spring注入服务组件
        @Autowired
        private IndexService indexService;
    
        @GetMapping("/")
        public String index(Model model) {
            String index = indexService.getIndex();
            model.addAttribute("index", index);
            // 返回视图 即index.html
            return "index";
        }
    }
    
    • 第一个Service

    getIndex()是一个简单的服务方法。该方法所做的只是返回String类型的index值,该服务组件供控制层调用。

    /**
     * 第一个SpringMVC程序--Service层
     *  * @author zhuhuix
     * @date 2020-07-02
     */
    @Service
    public class IndexService {
        public String getIndex() {
            return "hello world!!!";
        }
    }
    
    • 第一个View

    -- 使用Thymeleaf模板引擎

    ### application.properties
    ###ThymeLeaf配置
    spring:
      thymeleaf:
        #模板的模式,支持 HTML, XML TEXT JAVASCRIPT
        mode: HTML5
        #编码 可不用配置
        encoding: UTF-8
        #内容类别,可不用配置
        content-type: text/html
        #开发配置为false,避免修改模板还要重启服务器
        cache: false
        #配置模板路径,默认是templates,可以不用配置
        prefix: classpath:/templates
    

    -- 定义index.html视图层

    <!DOCTYPE html>
    <html  xmlns:th="http://www.thymeleaf.org" >
    <head>
         <meta charset="UTF-8"/>
         <title>Title</title>
    </head>
     <body>
     <p th:text="${index}" />
     </body>
     </html>
    
    • 运行测试
      在这里插入图片描述
    尝试使用Spring Boot DevTools

    •代码变更后应用会自动重启;
    •当面向浏览器的资源(如模板、JavaScript、样式表)等发生变化时,会自动刷新浏览器

    • pom.xml
    	<dependencies>
    		<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
                <scope>runtime</scope>
            </dependency>
            ...
    	</dependencies>
     	<build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <!--fork : devtools生效必须设置成true -->
                        <fork>true</fork>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    • idea设置
      -- 需勾选Build project automaticallty
      在这里插入图片描述
      -- ctrl+alt+shift+/ :Registry 中第一项必须打勾
      在这里插入图片描述

    回顾总结

    • Spring核心框架:Spring核心框架是Spring领域中一切的基础。它提供了核心容器和依赖注入框架。
    • Spring Boot:Spring Boot构建在Spring之上,通过简化依赖管理、自动配置和运行时洞察,使Spring更加易用;
    • Spring MVC:我们通过SpringBoot初始化生成的框架上加入Controller,Service,View的分层,编写了第一个Spring MVC程序,并成功运行。
    • 使用Idea开发环境,安装Spring Boot DevTools并进行配置,提高了开发效率。
  • 相关阅读:
    终于回来了&&邮递员送信
    发射站
    黑匣子
    利维坦——(1)
    预告
    整除(水题)
    BZOJ054_移动玩具_KEY
    BZOJ4034_树上操作_KEY
    树链剖分学习&BZOJ1036
    BZOJ1208_宠物收养所_KEY
  • 原文地址:https://www.cnblogs.com/zhuhuix/p/13225379.html
Copyright © 2020-2023  润新知