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项目搭建(详细)的更多相关文章

  1. maven3常用命令、java项目搭建、web项目搭建详细图解(转)

     转自:http://blog.csdn.net/edward0830ly/article/details/8748986 maven3常用命令.java项目搭建.web项目搭建详细图解 2013-0 ...

  2. maven3常用命令、java项目搭建、web项目搭建详细图解

    http://blog.csdn.net/edward0830ly/article/details/8748986 ------------------------------maven3常用命令-- ...

  3. IDEA SpringBoot多模块项目搭建详细过程(转)

    文章转自https://blog.csdn.net/zcf980/article/details/83040029 项目源码: 链接: https://pan.baidu.com/s/1Gp9cY1Q ...

  4. 转 maven3常用命令、java项目搭建、web项目搭建详细图解

    转自地址:http://blog.csdn.net/edward0830ly/article/details/8748986 ------------------------------maven3常 ...

  5. 云计算之openstack ocata 项目搭建详细方法

    之前写过一篇<openstack mitaka 配置详解>然而最近使用发现阿里不再提供m版本的源,所以最近又开始学习ocata版本,并进行总结,写下如下文档 OpenStack ocata ...

  6. –IDEA+Maven+JavaWeb+tomcat项目搭建(图文并茂,详细)

    一.创建Maven项目 1:如果刚打开IDEA,显示的是这个页面,我们直接单击 Create New Project(创建项目) 或者 File-> New-> Project 2:选中左 ...

  7. SpringBoot 项目搭建(详细介绍+案例源码)

    SpringBoot 项目搭建 SpringBoot 项目整合源码 SpringBoot 项目整合 一.项目准备 1.1 快速创建 SpringBoot 项目 1.2 标准项目结构图如下 1.3 添加 ...

  8. Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建(转)

    这篇文章主要讲解使用eclipse对Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建过程,包括里面步骤和里面的配置文件如何配置等等都会详细说明. 如果还没有搭建好环境( ...

  9. 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API

    前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...

随机推荐

  1. mysql 权限管理 grant revoke

    grant all privileges  on  database.table to 'user'@'ip' identified by 'passwd' with grant  option; g ...

  2. C++中的简单继承

    Father.cpp: #include<iostream> using namespace std; class Father { protected: int width; int h ...

  3. Java日志相关概述

    日志是代码调试.生产运维必备工具,基本所有软件都会有日志记录. 1.常用日志框架介绍 1.Logging jdk1.5自带日志工具类,位于java.util.logging; 2.Log4j 市场占有 ...

  4. 2 JVM 运行机制

  5. 吴裕雄--天生自然java开发常用类库学习笔记:对象克隆技术

    class Person implements Cloneable{ // 实现Cloneable接口表示可以被克隆 private String name ; public Person(Strin ...

  6. 史上最全的mysql聚合函数总结(与分组一起使用)

    1.首先我们需要了解下什么是聚合函数 聚合函数aggregation function又称为组函数. 认情况下 聚合函数会对当前所在表当做一个组进行统计. 2.聚合函数的特点 1.每个组函数接收一个参 ...

  7. P1083 是否存在相等的差

    P1083 是否存在相等的差 转跳点:

  8. yeoman 介绍、安装 和 使用

    一.介绍.安装 1, 是什么 Yeoman其实是3个工具的总和: ü  yo --- 脚手架,自动生成工具 ü  Grunt.gulp --- 构建工具 (最初只有grunt,后面gulp火了添加进来 ...

  9. Web安全测试学习笔记 - vulhub环境搭建

    Vulhub和DVWA一样,也是开源漏洞靶场,地址:https://github.com/vulhub/vulhub 环境搭建过程如下: 1. 下载和安装Ubuntu 16.04镜像,镜像地址:htt ...

  10. Bug 佛祖镇楼

    原文链接:https://www.cnblogs.com/xdp-gacl/p/4198935.html // _ooOoo_ // o8888888o // 88" . "88 ...