SpingBoot项目搭建(详细)
SpingBoot
(原创:黑小子-余)
springboot官网:->点击<-
spring官网:->点击<-
一、SpringBoot简介
Spring Boot是由Pivotal团队提供的全新开源的轻量级框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,继承了Spring框架原有的优秀特性,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。设计目的:简化新Spring应用的搭建及开发。
面试一句话安排的面试官明明白白:Springboot是一个快速开发框架,能够帮助我们快速整合第三方常用框架,底层采用Maven继承,完全注解化,简化Xml配置,内嵌Tomcat,最终以Java应用程序执行。用来简化Spring应用的初始搭建以及开发过程。虽然说它是一个框架,实质上它就是一个Jar包。
Spring框架简介
在讲springboot时,必讲spring框架。可能是因为我爱她,在隔壁村那个叫春天的姑娘,去年种稻谷比赛我输给了她,不过那一次交手之后,我至今忘不了她,明年的划龙舟比赛,我打算请假回去,因为她也参加了,我们村如果没有我,划龙舟这个项目上,我们村可能又会输。不扯犊子了,继续。
面试一句话安排的面试官明明白白:Spring是一个IOC(依赖注入)也称DI(控制反转)与AOP(面向切面)的容器框架。它的目的是:使现有的技术更加实用,推荐最佳的编码实现,从而简化企业开发。主要模块:核心容器、Spring上下文、SpringAop、SpringDao、SpringROM、SpringWeb、SpringMVC。spring的出现意义相当于改变了世界,它存在的意义毋庸置疑。
好处
1、解耦。(降低各个组件还有各层之间的耦合度)
2、可以使容器提供众多的服务。(如:事务管理、日志管理)
3、单例模式的支持。(容器提供单例模式的支持,开发人员不需要自己去编码实现)
4、AOP技术。(利用AOP可以实现权限拦截等功能)
5、容器提供众多的辅助类。(这些辅助类可以加快项目的应用开发)
6、轻松与其它框架整合、集成。
控制反转、依赖注入、面向切面
IOC(控制反转):应用的本身不需要去创建和维护对象,而是交给它的外部容器去负责,这样控制权就交给了外部容器,从而耦合在一起。
(如:我们知道,在java中,实例化对象有三种方法:类构造器、静态工厂方法、实例工厂方法。在传统的java开发模式中,我们需要用new来创建或者getInstance等直接或间接调用构造方法来创建一个对象;而在spring开发模式中,spring使用工厂模式为我们创建了所需要的对象,我们使用时,不需要自己去创建,而是直接去调用spring为我们所提供的对象即可,这就是控制反转的思想。)
DI(依赖注入):运行期间,对象由外部容器动态的注入到组件中,让Bean与Bean之间以配置文件组织在一起,而不是以硬编码的方式。(Spring使用JavaBean对象的Set方法或者带参数的构造方法为我们创建所需对象时将其属性自动设置成我们需要的值的过程就是依赖注入的思想。)
AOP(面向切面):开发人员只需要关心点或横切典型的职责分界线的行为(如:日志和事务管理),进行模块化。AOP原理是:Spring采用JDK的动态代理来实现。(在面向对象的思想中,我们将事务纵向抽象成一个个的对象,而在spring的面向切面编程中,我们将某些类似的方面横向抽象成一个切面,对这些切面进行一些如:权限验证、事务管理、日志管理等公用操作过程就是面向切面编程的思想。)
(1)代理模式——Spring中AOP原理是:Spring采用JDK的动态代理来实现。
(2)单例模式——Spring的配置文件中定义Bean默认为单例模式。
(3)前端控制器模式——Spring提供Dispatcherservlet来对请求进行分发。
(4)工厂模式——在工厂模式中,我们创建对象是不会对客户端暴露我们创建的逻辑,而是提供一个共同的接口来指向新创建的对象。Spring中使用BeanFactory来创建对象的实例。
Spring事务
Spring支持两种事务:一种是编程式事务,一种是声明式事务。
编程式事务:这意味你通过编程的方式来管理事务,可以给你带来极大的灵活性,但是比较难以维护。
声明式事务:这意味你可以将业务代码和事务管理分离,你只需用注解和xml配置来管理事务,具有良好的适应性。
它和数据库事务一样,必须服从ACID原则:原子性、一致性、隔离性、持久性。
通俗理解,事务是一组原子操作单元,从数据库的角度来说,事务是一组SQL指令,要么全部执行,要么全部撤销不执行。
(1)原子性:事务中最基本的操作单元,要么全部成功,要么全部失败,然后回滚。
(2)一致性:保证事务在执行之前和执行之后数据库都保持一致的状态。
(3)隔离性:指的是并发环境下,当不同的事务同时操作相同的数据时,每个事务都有各自完整数据空间。
(4)持久性:表示事务执行完毕后,数据库的数据是永久保存在数据库中的。
并发事务问题
(1)第一类丢失更新:撤销一个事务时,把其他事务已提交更新的数据覆盖。
(2)脏读:一个事务读取到另一个事务未提交的更新数据。
(3)幻读和虚读:一个事务执行两次查询,第二次结果集包含第一次中没有或某些已经删除的数据,造成两次数据结果不一致;这是其中一个事务在这两次查询还在进行之中,插入或删除造成的。
(4)不可重复读:两个事务同时读取到同一条数据,此时刚好其中一个更新了数据,两个结果相异,不可被信任。
(5)第二类丢失更新:在不可重复读的情况下。如果两个事务都读取同一行,然后两个都进行了读写操作并提交,第一个事务所做的改变就会丢失。
二、SpringBoot搭建
本教程是在Eclipse开发工具中,IDEA中更快、更容易,里面有集成插件。
在线安装:注意我在我旧版本的Eclipse上安装插件时报错,百度试了很多方法没有成功。最后,我把旧版本Eclipse卸掉,去官网下载了最新版本成功了。
Eclipse官网:->点击<-
Eclipse安装教程:->点击<-
(1)安装springboot插件。打开eclipse -> Help -> Eclipse Marktplace。
(2)进去在 Find 搜索 spring 或者 sts 在线查找。
(3)然后一直next,等下载加载完毕后,可以看到下图已经安装的插件。
(4)可以看到菜单项多出了 SpringBoot 这一项,表示成功了。
(5)接下来创建SpringBoot-1项目,如图
(5)这里我只勾选Spring Web,因为只做一个简单的演示。勾选其他的,太耗时。
(6)创建完成。这里有个问题,项目的包都是以文件夹形式存在的,那我们来设置解决一下。
(7)鼠标右键,最后一项 properties。
(8)按图步骤,即可。
(9)现在来编写一个程序,创建controller包,加入controller类。注意左图这个方式是错误的,程序能跑,但页面说路径是错的,具体可以去参考springboot规范。右图这样成功运行。
(10)SpringBoot1Application执行程序类是自动生成的,我们只需创建Controller类,创建一个方法,加入注解。
package com.springboot.demo.controller; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class MyController { @RequestMapping("/hello")
public String Hello() {
return "Hello 欢迎来到SpringBoot世界!";
}
}
注解@RestController与@Controller的区别
开发RESTful API 时,一般都会在Controller上加上@Controller注解,但是有时候加上@RestController,看了资料,说说他们的区别:
@RestController注解等价于@ResponseBody + @Controller。@RestController和@Controller的共同点是都用来表示Spring某个类是否可以接收HTTP请求,二者区别: @RestController无法返回指定页面,而@Controller可以;前者可以直接返回数据,后者需要@ResponseBody辅助。
① 是否可以返回页面
答:@RestController无法返回指定页面,而@Controller可以。
解析:对于Controller, 如果只是使用@RestController注解,则其方法无法返回指定页面,此时配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是 return 里的内容。 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
② 返回内容
如果需要返回JSON,XML或自定义mediaType内容到页面,@RestController自己就可以搞定,这个注解对于返回数据比较方便,因为它会自动将对象实体转换为JSON格式。而@Controller需要在对应的方法加上@ResponseBody注解。
@RequestMapping:是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@SpringBootApplication:主程序注解,用来开启springboot的各项能力。
(11)项目运行,有好几种,这种比较快捷。
(12)启动可以看到,8080端口号。
浏览器输入:http://localhost:8080/hello ,成功输出。
-----------------------------------------------------------END----------------------------------------------------------------
qq:2931445528
微信:Y2931445528
SpingBoot项目搭建(详细)的更多相关文章
- maven3常用命令、java项目搭建、web项目搭建详细图解(转)
转自:http://blog.csdn.net/edward0830ly/article/details/8748986 maven3常用命令.java项目搭建.web项目搭建详细图解 2013-0 ...
- maven3常用命令、java项目搭建、web项目搭建详细图解
http://blog.csdn.net/edward0830ly/article/details/8748986 ------------------------------maven3常用命令-- ...
- IDEA SpringBoot多模块项目搭建详细过程(转)
文章转自https://blog.csdn.net/zcf980/article/details/83040029 项目源码: 链接: https://pan.baidu.com/s/1Gp9cY1Q ...
- 转 maven3常用命令、java项目搭建、web项目搭建详细图解
转自地址:http://blog.csdn.net/edward0830ly/article/details/8748986 ------------------------------maven3常 ...
- 云计算之openstack ocata 项目搭建详细方法
之前写过一篇<openstack mitaka 配置详解>然而最近使用发现阿里不再提供m版本的源,所以最近又开始学习ocata版本,并进行总结,写下如下文档 OpenStack ocata ...
- IDEA+Maven+JavaWeb+tomcat项目搭建(图文并茂,详细)
一.创建Maven项目 1:如果刚打开IDEA,显示的是这个页面,我们直接单击 Create New Project(创建项目) 或者 File-> New-> Project 2:选中左 ...
- SpringBoot 项目搭建(详细介绍+案例源码)
SpringBoot 项目搭建 SpringBoot 项目整合源码 SpringBoot 项目整合 一.项目准备 1.1 快速创建 SpringBoot 项目 1.2 标准项目结构图如下 1.3 添加 ...
- Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建(转)
这篇文章主要讲解使用eclipse对Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建过程,包括里面步骤和里面的配置文件如何配置等等都会详细说明. 如果还没有搭建好环境( ...
- 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API
前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...
随机推荐
- postProcessBeanFactory方法源码跟踪
看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplic ...
- android中的简单animation(三)accelerate(加速),decelerate(减速),anticipate,overshoot,bounce
animation_3.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
- PHPExcel方法总结
下面是总结的几个使用方法include 'PHPExcel.php';include 'PHPExcel/Writer/Excel2007.php';//或者include 'PHPExcel/Wri ...
- ej3-1优先使用静态工厂方法而非构造函数来创建对象
背景 很早之前就已经自己翻译了,先简单的贴出来,并做一下回顾. 条款1 优先使用静态工厂方法而非构造函数来创建对象 允许客户端创建一个实例的传统方法是:提供一个公共构造函数:有另外一个必须成为每个程序 ...
- login SMTP send mail error : Unable to read data from the transport connection: net_io_connectionclosed
client.Credentials = new NetworkCredential(sSMTPuser, sSMTPpass); client.Credentials = new NetworkCr ...
- flutter之VSCode下Flutter常用终端命令行
https://www.cnblogs.com/lxlx1798/p/11049922.html 梁飞宇 [Flutter学习]之VSCode下Flutter常用终端命令行 Flutter 常用命令行 ...
- B. Yet Another Crosses Problem
B. Yet Another Crosses Problem time limit per test 2 seconds memory limit per test 256 megabytes inp ...
- Python基础week1
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- Web基础之日志
Web基础之日志 日志在企业开发中有着不可或缺的作用,它可以用以记录用户操作.系统运行状态和错误信息.日志记录的好坏直接关系到系统出现问题时定位的速度. 最开始的日志一般使用log4j,后来s ...
- 046-unset对静态变量无法销毁
<?php function digui() { static $count = 0; echo $count; $count++; unset($count); } digui(); digu ...