當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot的基础
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot的基础
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概念
Spring的優缺點
1. 優點(AOP和IOC簡化開發)Spring是Java企業版(Java Enterprise Edition,JEE,也稱J2EE)的輕量級代替品。無需開發重量級的Enterprise JavaBean(EJB),Spring為企業級Java開發提供了一種相對簡單的方法,通過依賴注入和面向切面編程,用簡單的Java對象(Plain Old Java Object,POJO)實現了EJB的功能。 2. 缺點(配置繁瑣和pom.xml的坐標引入麻煩)1. 雖然Spring的組件代碼是輕量級的,但它的配置卻是重量級的。一開始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的組件掃描,這消除了大量針對應用程序自身組件的顯式XML配置。Spring 3.0引入了基于Java的配置,這是一種類型安全的可重構配置方式,可以代替XML。2. 所有這些配置都代表了開發時的損耗。因為在思考Spring特性配置和解決業務問題之間需要進行思維切換,所以編寫配置擠占了編寫應用程序邏輯的時間。和所有框架一樣,Spring實用,但與此同時它要求的回報也不少。3. 除此之外,項目的依賴管理也是一件耗時耗力的事情。在環境搭建時,需要分析要導入哪些庫的坐標,而且還需要分析導入與之有依賴關系的其他庫的坐標,一旦選錯了依賴的版本,隨之而來的不兼容問題就會嚴重阻礙項目的開發進度。SpringBoot
1. springboot解決spring的缺點:SpringBoot基于**約定優于配置**的思想,不必在配置與邏輯業務之間進行思維的切換,從而大大提高了開發的效率. 2. SpringBoot的特點:1. 為基于Spring的開發提供更快的入門體驗2. 開箱即用,沒有代碼生成,也無需XML配置。同時也可以修改默認值來滿足特定的需求3. 提供了一些大型項目中常見的非功能性特性,如嵌入式服務器、安全、指標,健康檢測、外部配置等4. SpringBoot不是對Spring功能上的增強,而是提供了一種快速使用Spring的方式 3. 核心功能1. 起步依賴(start dependence)起步依賴本質上是一個Maven項目對象模型(Project Object Model,POM),定義了對其他庫的傳遞依賴,這些東西加在一起即支持某項功能。簡單的說,起步依賴就是將具備某種功能的坐標打包到一起,并提供一些默認的功能。2. 自動配置(auto configuration)SpringBoot的自動配置是一個運行時(更準確地說,是應用程序啟動時)的過程,考慮了眾多因素,才決定Spring配置應該用哪個,不該用哪個。該過程是Spring自動完成的。開始代碼
快速開始
1. 創建普通的maven項目,簡單的javase就好 2. 編寫pom.xml文件1. SpringBoot要求,項目要繼承SpringBoot的起步依賴spring-boot-starter-parent<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version></parent>2. SpringBoot要集成SpringMVC進行Controller的開發,所以項目要導入web的啟動依賴(以功能為單位的)<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies> 3. 編寫啟動引導類(引導類放置的位置在創建項目時指定的groupid包下)package cn.wzlove;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;// 使用注解標注該類是SpringBoot的引導類@SpringBootApplicationpublic class MySpringBootApplication {public static void main(String[] args) {// run方法表示運行SpringBoot的引導類,參數是SpringBoot引導類的字節碼文件SpringApplication.run(MySpringBootApplication.class);}} 4. 編寫Controller進行測試@Controllerpublic class QuickController {@RequestMapping("quick")@ResponseBodypublic String quickStart(){return "quick start";}}====================================或者使用RestController@RestControllerpublic class HelloController {@RequestMapping("hello")public String hello(){return "hello";}}SpringBoot的熱部署
1. 添加功能坐標:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency> 2. idea的配置file ---> setting,搜索compile,選中Compile,右側會出現內容,這個時候選中Build project automatically.點擊apply,點擊ok 3. 快捷鍵ctrl+alt+shift+/,選中Registry,在aompiler.automake.allow.when.app.running后面打上對勾,之后關閉就好.idea快速創建SpringBoot項目
1. file創建工程,這個時候不要選擇maven,而是選擇Spring Initializr,點擊下一步,輸入Group和Artifact,下一步,選擇依賴,目前先選擇Web下的Web,下一步,就可以一完成創建了.SpringBoot的原理分析:
起步原理分析
1. SpringBoot繼承的起步依賴spring-boot-starter-parent<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version></parent>查看源碼可以看到默認加載resources下的以application開頭的配置文件和各種插件,并且還繼承了spring-boot-dependencies.繼續查看spring-boot-dependencies的源碼,主要看<properties></properties>之間的內容,也就是版本控制,里面包含了各種依賴包的版本號,繼續看<dependencyManagement>里面的內容,版本統一管理器.這下就可以看出來繼承的起步依賴主要是為了進行jar包的版本控制的.這樣我們在pom文件中導入依賴就不需要指定版本了.2. web工程的起步依賴所做的事<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>查看源碼可以看到這個依賴內部引入了更多的依賴,比如過spring-web,spring-webmvc,json等等,傳遞依賴.自動配置
1. 從@SpringBootApplication開始研究,自動配置就是從這開始的.查看源碼主要看:// SpringBootConfiguration其實就是@Configuration,指定配置文件的@SpringBootConfiguration// 自動配置@EnableAutoConfiguration// 根據約定大于配置,所以默認的掃描包是啟動類下及其子包下的所有Bean@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) 2. @EnableAutoConfiguration代表是否可以自動配置 ,查看源碼主要看@Import(AutoConfigurationImportSelector.class),查看AutoConfigurationImportSelector類下的selectImports方法,看List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);其實應該就是全包名的集合,點進去看看,會讓去查找META-INF/spring.factories下的這個文件,這個文件在當前類所在的包下,打開看看就是各種全類名.可以繼續向下研究,查看各種AutoConfiguration類的源碼創建配置文件修改端口號和web應用的名稱
resources下創建application.properties,內容為:# 設置啟動端口號為8081server.port=8081# 當前web的應用名稱server.servlet.context-path=/springbootSpringBoot的配置文件:
配置文件類型和作用:
1. 覆蓋默認配置: SpringBoot是基于約定的,所以很多配置都有默認值,但如果想替換默認配置的話,就可以使用application.properties或者application.yml(application.yaml)進行配置。 2. 配置額外信息,比如數據源等等 3. 配置文件放在resources目錄下.默認加載application.properties或application.yml(application.yaml)文件 4. application.properties文件是鍵值對類型的文件.yml文件類似于json.yml文件
1. YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,并且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以數據為核心的,比傳統的xml方式更加簡潔。2. YML文件的擴展名可以使用.yml或者.yaml。(SpringBoot是有默認加載順序的,源碼可以看到,先加載yml的,后加載yaml的,最后加載properties,后面的會覆蓋前面的). 3. 語法形式:1. 配置普通數據name: wangzhi =====> 冒號后面有空格2. 配置對象數據(person對象為例),兩種,推薦第一種person:name: zhangsanage: 18addr: beijing=============================person: {name: zhangsan,age: 18,addr: beijing}3. 配置數組普通數組:city:- beijing- tianjin- chongqing- shanghai=============================city: [beijing,tianjin,chongqing,shanghai]對象集合:student:- name: tomage: 18addr: beijing- name: lucyage: 17addr: yuncheng============================student: [{name: zhangsan,age: 18,addr: beijing},{name: tom,age: 18,addr: beijing}]4. map配置:map:key1: value1key2: value2 4. 測試注入:application.yml的內容為:name: wangzhiperson:name: lucyage: 24addr: 運城代碼內的注入(使用@Value注解):@Value("${name}")private String name;@Value("${person.addr}")private String addr;@Value("${person.age}")private int age;代碼內的注入方式2:通過注解@ConfigurationProperties(prefix="配置文件中的key的前綴")可以將配置文件中的配置自動與實體進行映射,需要提供get和set方法 2. 執行器的配置(編寫yml的文件的時候有代碼提示,不配置也可以完成功能)<!--@ConfiguaritionProperties的執行器的配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>SpringBoot與其他技術的整合
與Mybatis的整合
1. 添加Mybatis的起步依賴<!--mybatis起步依賴--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency> 2. 添加數據庫驅動坐標<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency> 3. 添加數據庫的連接信息(在resources下的application.properties添加內容):# 數據庫的連接信息spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=nrblwbb7 4. 創建數據庫和表結構:CREATE DATABASE test;USER test;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` INT(11) NOT NULL AUTO_INCREMENT,`username` VARCHAR(50) DEFAULT NULL,`password` VARCHAR(50) DEFAULT NULL,`name` VARCHAR(50) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '張三');INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');SELECT * FROM USER; 5. 創建實體類public class User {// 主鍵private Long id;// 用戶名private String username;// 密碼private String password;// 姓名private String name;//此處省略getter和setter方法 .. ..} 6. 創建mapper接口public interface UserMapper {List<User> queryUserList();} 7. 創建映射配置文件(在resources下新建mapper文件夾,在下面創建UserMapper.xml)<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="cn.wzlove.mapper.UserMapper"><select id="queryUserList" resultType="user">select * from user</select></mapper> 8. 配置文件配置mybatis的信息:#spring集成Mybatis環境#pojo別名掃描包mybatis.type-aliases-package=cn.wzlove.domain#加載Mybatis映射文件mybatis.mapper-locations=classpath:mapper/*Mapper.xml 9. 寫個Controller進行代碼測試@RestControllerpublic class Controller {@Autowiredprivate UserMapper userMapper;@RequestMapping("mybatis")public String testMyBatis(){List<User> users = userMapper.queryUserList();System.out.println(users);return "success";}}與Junit的整合
1. 添加SpringBoot集成Junit測試的起步依賴(如果使用idea創建的話會直接引入,不需要重復導入)<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> 2. 編寫測試類:// SpringRunner繼承自SpringJUnit4ClassRunner,使用哪一個Spring提供的測試測試引擎都可以@RunWith(SpringRunner.class)// classes后面的字節碼是啟動類的字節碼@SpringBootTest(classes = SpringbootMybatisApplication.class)public class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testMyBatis(){List<User> users = userMapper.queryUserList();System.out.println(users);}}與SpringDataJPA的整合
1. 添加Spring Data JPA的起步依賴<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency> 2. 添加mysql連接驅動依賴<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency> 3. 在application.properties中配置數據庫和jpa的相關屬性# 配置數據庫的連接信息spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql:127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=nrblwbb7# 配置Spring Data JPA的相關信息spring.jpa.database=mysqlspring.jpa.show-sql=truespring.jpa.generate-ddl=truespring.jpa.hibernate.ddl-auto=update 4. 創建實體并使用springdatajpa進行配置@Entitypublic class User {// 主鍵(mysql主鍵自增)@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;// 用戶名private String username;// 密碼private String password;// 姓名private String name;//此處省略setter和getter方法... ...} 5. 創建repository接口(也就是dao)/*** @ClassName UserRepository* @Author wz157* @Date 2018/10/19 23:18* @Description TODO* 兩個泛型,第一個是實體,第二個是主鍵類型*/public interface UserRepository extends JpaRepository<User,Long> {List<User> findAll();} 6. 創建測試類進行測試@RunWith(SpringRunner.class)@SpringBootTest(classes = SpringbootSpringdatajpaApplication.class)public class JpaTest {@Autowiredprivate UserRepository userRepository;@Testpublic void testJps(){List<User> all = userRepository.findAll();System.out.println(all);}} 7. 如果是jdk9可能報錯,需要額外引入依賴<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.0</version></dependency>與Redis的整合
1. 配置redis的起步依賴:<!-- 配置使用redis啟動器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2. 配置redis的連接信息(本地需要安裝有Redis)#Redisspring.redis.host=127.0.0.1spring.redis.port=6379 3. 編寫測試類:@RunWith(SpringRunner.class)@SpringBootTest(classes = SpringbootSpringdatajpaApplication.class)public class RedisTest {// 轉化成json各執字符串@Autowiredprivate RedisTemplate<String,String> redisTemplate;@Autowiredprivate UserRepository userRepository;@Testpublic void testRedis() throws JsonProcessingException {// 1. 從redis中獲取數據,習慣json字符串String userListJson = redisTemplate.boundValueOps("user.findAll").get();// 2. 判斷redis是否存在數據if(null == userListJson){// 3. 如果不存在數據,從數據庫查詢List<User> all = userRepository.findAll();// 將查詢出的數據存儲到緩存中// 先將集合轉換成json格式的字符串, 使用jackson進行轉換ObjectMapper objectMapper = new ObjectMapper();userListJson = objectMapper.writeValueAsString(all);redisTemplate.boundValueOps("user.findAll").set(userListJson);System.out.println("=============從數據庫中查詢=============");} else{System.out.println("從緩存中查詢");}// 4. 如果存在,將結果返回(測試直接打印就好)System.out.println(userListJson);}}轉載于:https://www.cnblogs.com/wadmwz/p/9819901.html
總結
以上是生活随笔為你收集整理的SpringBoot的基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell脚本对Linux进行文件校验
- 下一篇: 关于vue的笔记