码迷,mamicode.com
首页 > 编程语言 > 详细

Springboot基础(一)

时间:2019-11-11 00:13:04      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:not   xsd   一起   增强   core   import   name   standards   代码解析   

1. springboot产生的背景

1.1 Spring回顾

1.1.1 Spring优点分析

  Spring是J2EE的轻量级代替品,它通过依赖注入和面向切面编程,用简单的Java对象实现了EJB的功能。(EJB是一组构建企业级web应用的专用javaBean。)

1.1.2 Spring缺点分析

  (1)配置文件很多。一开始,Spring是用很多的xml配置;Sping2.5引入了基于注解的组件扫描,消除了大量针对应用程序自身组件的显示xml配置;Spring3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替xml。 所以Spring的配置依然是重量级的。

  (2)测试、启动、发布,需要依赖外界的容器。

  (3)无法独立运行。

2 Springboot简介

2.1 Springboot的定义

  Springboot是基于Spring框架的一个可以快速搭建、让系统独立运行的工具体系。它使用约定优于配置的理念使项目快速运行。

2.2 Springboot的特点

  (1)为基于Spring的开发提供更快的入门体验。

  (2)开箱即用,没有代码生成,也无需xml配置,同时也可以修改默认值来满足特定的需求。

  (3)提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标、健康检测、外部配置等

  (4)Springboot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

2.3 Springboot的核心功能

  (1)简化依赖:Springboot提供了一系列的starter来简化Maven的依赖加载。简单的说就是讲具备某种功能的jar包打包到一起,并提供一些默认的功能(定义了对其他库的传递依赖)。

  (2)自动配置:Springboot会根据在类路径中的jar包、类,为jar包里的类自动配置bean。Springboot的自动配置是一个运行时(应用程序启动时)的过程。

3. 搭建Springboot工程

3.1 代码实现

(1)创建Mavne工程(普通的Java工程就可以),这里我们使用idea工具。(安装配置maven的步骤不再赘述)

 技术图片

 

 

 技术图片

 

 

 技术图片

 

 

 技术图片

 

 

 (2)配置pom文件

  ① 继承依赖Springboot的起步依赖spring-boot-starter-parent

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

  ② Springboot要继承SpringMVC进行Controller的开发,所以要导入web的启动依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

(3)编写启动类

package com.cn.starter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages={"com.cn.controller"})//修改默认扫描包的路径
public class MySpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringbootApplication.class);
    }
}

注意:创建项目后,可能会出现@SpringBootApplication注解jar包无法引入的问题。

解决办法:找到maven的本地仓库,删除 本地库\org\springframework\boot\spring-boot-autoconfigure 这个路径下的文件夹,然后在idea中重新install项目即可(View->Tool  Windows->Maven projects)。

(4)编写Controller,Springboot默认会扫描启动类的同级包或子包下的文件,不在此路径下的文件需要手动更改默认扫描路径

package com.cn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class QuickStarterController {
    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "Springboot 访问成功";
    }
}

(5)测试

启动MySpringbootApplication.java,控制台打印日志

  .   ____          _            __ _ _
 /\\ / ____ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | _ | _| | _ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.0.RELEASE)

2019-11-10 22:03:58.566  INFO 50584 --- [           main] com.cn.starter.MySpringbootApplication   : Starting MySpringbootApplication on H0T37LAJE3WUP2H with PID 50584 (E:\ideaWorkspaces\springboot_quick\target\classes started by Administrator in E:\ideaWorkspaces\springboot_quick)
2019-11-10 22:03:58.572  INFO 50584 --- [           main] com.cn.starter.MySpringbootApplication   : No active profile set, falling back to default profiles: default
2019-11-10 22:04:00.774  INFO 50584 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-11-10 22:04:00.790  INFO 50584 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-11-10 22:04:00.791  INFO 50584 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.27]
2019-11-10 22:04:00.934  INFO 50584 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-11-10 22:04:00.934  INFO 50584 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2233 ms
2019-11-10 22:04:01.165  INFO 50584 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService applicationTaskExecutor
2019-11-10 22:04:01.398  INFO 50584 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ‘‘
2019-11-10 22:04:01.403  INFO 50584 --- [           main] com.cn.starter.MySpringbootApplication   : Started MySpringbootApplication in 3.541 seconds (JVM running for 5.348)
2019-11-10 22:04:19.715  INFO 50584 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet dispatcherServlet
2019-11-10 22:04:19.715  INFO 50584 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet dispatcherServlet
2019-11-10 22:04:19.724  INFO 50584 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 9 ms

通过日志发现Tomcat started on port(s): 8080 (http) with context path " ",tomcat已经启动,端口为8080,web应用的虚拟工程名为空。

打开浏览器访问:http://localhost:8080/quick

技术图片

 

 

 3.2 代码解析

(1)Springboot代码解析:

  ① @SpringBootApplication:标注Springboot的启动类,该注解详细介绍见Springboot原理分析。

  ② SpringApplication.run(MySpringbootApplication.class),代表运行SpringBoot的启动类,参数为Springboot启动类的字节码对象

(2)Springboot工程的热部署

  在开发中我们会反复修改类、页面等资源,每次修改后需要重新启动才会生效,这样每次启动就会很耗时麻烦。Springboot支持热部署,修改代码后不需要重启就能生效,在pom.xml中添加如下配置:

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
        </dependency>

注意:在IDEA中进行SpringBoot热部署失败问题,是因为IDEA默认情况下不会自动编译,需要先对IDEA进行自动编译的设置。

技术图片

 

 然后shift+ctrl+alt+/,选择registry

技术图片

 

 3.3 使用idea快速搭建Springboot项目

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 创建好的项目结构如图

技术图片

 

 通过idea快速创建的Springboot项目的pom.xml中已经导入了我们选择的web依赖的坐标。

<?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.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cn</groupId>
    <artifactId>springboot_quick2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_quick2</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>

创建Controller测试部分此处不再赘述。

Springboot基础(一)

标签:not   xsd   一起   增强   core   import   name   standards   代码解析   

原文地址:https://www.cnblogs.com/willncy/p/11831113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!