# srpingboot_easy **Repository Path**: oswl/srpingboot_easy ## Basic Information - **Project Name**: srpingboot_easy - **Description**: springboot入门小项目,更新中。。。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-03 - **Last Updated**: 2022-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot简介 ## 1.什么是springboot SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: ![1525484756737](img/README/1525484756737.png) 我们可以看到下面的一段介绍: > Takes an opinionated view of building production-ready Spring applications. Spring Boot favors convention over configuration and is designed to get you up and running as quickly as possible. 翻译一下: > 用一些固定的方式来构建生产级别的spring应用。Spring Boot 推崇约定大于配置的方式以便于你能够尽可能快速的启动并运行程序。 其实人们把Spring Boot 称为搭建程序的`脚手架`。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。 ## 2.为啥要学习SpringBoot java一直被人诟病的一点就是臃肿、麻烦。当我们还在辛苦的搭建项目时,可能Python程序员已经把功能写好了,究其原因注意是两点: - 复杂的配置, 项目各种配置其实是开发时的损耗, 因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。 - 一个是混乱的依赖管理。 项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力杀手。 而SpringBoot让这一切成为过去! > Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。 我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。 ## 3.SpringBoot的特点 Spring Boot 主要目标是: - 为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验 - 开箱即用(启动器starter-其实就是SpringBoot提供的一个jar包),但通过自己设置参数(.properties),即可快速摆脱这种方式。 - 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等 - 绝对没有代码生成,也无需 XML 配置。 更多细节,大家可以到[官网](http://projects.spring.io/spring-boot/)查看。 # 小项目介绍 ## 1.SpringBoot快速入门 springboot的一个入门项目,实现了一个hello接口,访问该接口返回字符串Hello , this is springboot project ! - 导入依赖 首先我们需要指定springboot为父项目 SpringBoot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可! ```xml org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE ``` 默认情况下,maven工程的jdk版本是1.5,而我们开发使用的是1.8,因此这里我们需要修改jdk版本,只需要简单的添加以下属性即可: ```xml 1.8 1.8 1.8 ``` 最后需要导入需要的依赖,注意,不需要填写版本号,像这种不用配置版本号的依赖,我们称之为启动器,这是SpringBoot完成自动配置最为重要的一项。 原理是SpringBoot针对该启动器做了一系列的自动配置关联,导入即可完成自动配置依赖。 由于我们当前项目需要web环境,因此需要用到web启动器,导入即可。 ```xml org.springframework.boot spring-boot-starter-web ``` 配置完成后,我们会发现项目中多出了大量的依赖: ![image-20210703224306108](img/README/image-20210703224306108.png) 这些都是SpringBoot根据spring-boot-starter-web这个依赖自动引入的,而且所有的版本都已经管理好,不会出现冲突。 完整pom如下: ```xml org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE 4.0.0 com.wanglei springboot_01_quickstart 1.0-SNAPSHOT 1.8 1.8 1.8 org.springframework.boot spring-boot-starter-web ``` - 编写启动类 Spring Boot项目通过main函数即可启动,我们需要创建一个启动类: ![image-20210703224623541](img/README/image-20210703224623541.png) 然后编写main函数 ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` - 编写接口 ```java package com.wanglei.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping("hello") public String hello() { return "Hello , this is springboot project !"; } } ``` - 启动测试 接下来,我们运行main函数,查看控制台: ![image-20210703225630872](img/README/image-20210703225630872.png) 并且可以看到监听的端口信息: ![image-20210703225833473](img/README/image-20210703225833473.png) - 1)监听的端口是8080 - 2)SpringMVC的映射路径是:/ - 3)`/hello`路径已经映射到了`HelloController`中的`hello()`方法 打开页面访问:http://localhost:8080/hello ![image-20210703230041073](img/README/image-20210703230041073.png) ## 2.SpringBoot的属性注入(三种方式) ### a.Java配置注入 在入门案例中,我们没有任何的配置,就可以实现一个SpringMVC的项目了,快速、高效! 但是有同学会有疑问,如果没有任何的xml,那么我们如果要配置一个Bean该怎么办?比如我们要配置一个数据库连接池,以前会这么玩: ```xml ``` 现在该怎么做呢? #### i.回顾历史 事实上,在Spring3.0开始,Spring官方就已经开始推荐使用java配置来代替传统的xml配置了,我们不妨来回顾一下Spring的历史: - Spring1.0时代 在此时因为jdk1.5刚刚出来,注解开发并未盛行,因此一切Spring配置都是xml格式,想象一下所有的bean都用xml配置,细思极恐啊,心疼那个时候的程序员2秒 - Spring2.0时代 Spring引入了注解开发,但是因为并不完善,因此并未完全替代xml,此时的程序员往往是把xml与注解进行结合,貌似我们之前都是这种方式。 - Spring3.0及以后 3.0以后Spring的注解已经非常完善了,因此Spring推荐大家使用完全的java配置来代替以前的xml,不过似乎在国内并未推广盛行。然后当SpringBoot来临,人们才慢慢认识到java配置的优雅。 有句古话说的好:拥抱变化,拥抱未来。所以我们也应该顺应时代潮流,做时尚的弄潮儿,一起来学习下java配置的玩法。 #### ii.尝试java配置 java配置主要靠java类和一些注解,比较常用的注解有: - `@Configuration`:声明一个类作为配置类,代替xml文件 - `@Bean`:声明在方法上,将方法的返回值加入Bean容器,代替``标签 - `@value`:属性注入 - `@PropertySource`:指定外部属性文件, 我们接下来用java配置来尝试实现连接池配置: 首先引入Druid连接池依赖: ```xml com.alibaba druid 1.1.6 ``` 创建一个jdbc.properties文件,编写jdbc属性: ```properties jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot_easy jdbc.username=test jdbc.password=123456 ``` 然后编写代码: ```java @Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfig { @Value("${jdbc.url}") String url; @Value("${jdbc.driverClassName}") String driverClassName; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } } ``` 解读: - `@Configuration`:声明我们`JdbcConfig`是一个配置类 - `@PropertySource`:指定属性文件的路径是:`classpath:jdbc.properties` - 通过`@Value`为属性注入值 - 通过@Bean将 `dataSource()`方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。 然后我们就可以在任意位置通过`@Autowired`注入DataSource了! 我们在`HelloController`中测试: ```java @RestController public class HelloController { @Autowired private DataSource dataSource; @GetMapping("hello") public String hello() { System.out.println(dataSource); return "Hello , this is springboot project !"; } } ``` 然后Debug运行并查看: ![image-20210704154627343](img/readme/image-20210704154627343.png) 属性注入成功了! b.springboot的属性 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request