zoukankan      html  css  js  c++  java
  • SpringBoot学习笔记(一)

    一、SpringBoot

    1,SpringBoot简介

        Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
        Spring框架是Java平台的一种开源框架,提供有控制反转特性的容器(ioc容器),ioc旨在方便项目维护和测试,他提供一种通过Java的反射机制对Java的对象进行统一的配置和管理的方法,同时通过ioc容器管理对象的生命周期,通过扫描xml文件或类上特定Java注解来配置对象,程序员可以通过依赖查找和依赖注入来获取对象。springAop框架基于代理模式,aop框架针对模块之间的交叉点进行模块化。spring框架下的事务管理,远程访问等功能均可以通过使用SpringAOP技术实现,spring的事务管理框架为Java平台带来了一种抽象机制,使所有的事务能够与保存点一起工作,并且可以在
        在 Spring 体系中,Spring Boot JPA 就是约定优于配置最佳实现之⼀,不需要关注表结构,我们约定类名即是表名,属性名即是表的字段,String 对应 varchar,long 对应 bigint,只有需要⼀些特殊要求的属性,我们再单独进⾏配置,按照这个约定我们可以将以前的⼯作⼤⼤的简化。Spring Boot 体系将约定优于配置的思想展现得淋淋尽致,⼩到配置⽂件,中间件的默认配置,⼤到内置容器、⽣态中的各种 Starters ⽆不遵循此设计规则。Spring Boot ⿎励各软件组织⽅创建⾃⼰的 Starter,创建
    Starter 的核⼼组件之⼀就是 autoconfigure 模块,也是 Starter 的核⼼功能,在启动的时候进⾏⾃动装配,属
    性默认化配置。
    可以说正是因为 Spring Boot 简化的配置和众多的 Starters 才让 Spring Boot 变得简单、易⽤、快速上⼿,也可以说正是约定优于配置的思想的彻底落地才让 Spring Boot ⾛向辉煌。Spring Boot 约定优于配置的思想让Spring Boot 项⽬⾮常容易上⼿,让编程变的更简单,其实编程本该很简单,简单才是编程的美。

    2,微服务

    微服务:架构风格
    一个应用是一组小型服务:可以通过hTTP的方式进行互通
    单体应用:每一个功能元素最后都是可以独立升级替换的服务单元

    3,环境约束

    jdk 推荐1.7及以上
    maven 推荐3.3及以上
    Intellij IDEA sts
    spring Boot1.5.9

    4,SpringBoot helloworld

    1,创建一个maven工程
    2,导入springboot相关依赖
    <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-parent</artifactId>
           </dependency>

           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-web</artifactId>
           </dependency>
           
    3,编写一个主程序
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

    @SpringBootApplication
    public class HelloWorldApplication {
       public static void main(String[] args) {
           SpringApplication.run(HelloWorldApplication.class,args);

      }
    }

    5,springboot 探究hello world

    1,父项目

    <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>2.1.8.RELEASE</version>
    </parent>
    他的父项目 。。。。。

    导入依赖有默认版本不需要导入版本号

    没有在dependencies里面管理的需要导入版本号

    2,导入依赖

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

    spring-boot-starter:springboot的场景启动器,导入了web的依赖版本模块

    springboot将所有的功能场景都抽取出来,做成一个starter启动器,使用时导入相关场景启动器。

    3,主程序类,入口类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

    @SpringBootApplication
    public class HelloWorldApplication {
       public static void main(String[] args) {
           SpringApplication.run(HelloWorldApplication.class,args);

      }
    }

    @SpringBootApplication 注解标注在那个方法上,该方法就是主启动类

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(
       excludeFilters = {@Filter(
       type = FilterType.CUSTOM,
       classes = {TypeExcludeFilter.class}
    ), @Filter(
       type = FilterType.CUSTOM,
       classes = {AutoConfigurationExcludeFilter.class}
    )}
    )
    public @interface SpringBootApplication {

    @SpringBootApplication注解的配置类

    标注在某个类上表示这是一个springboot配置类

    @Configuration:配置类上来标注这个注解;

    配置类--配置文件;配置类也是容器中的额一个组件;@Component

    @EnableAutoConfiguration 开启自动配置功能

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})
    public @interface EnableAutoConfiguration {

    @AutoConfigurationPackage 自动配置包

    @Import({Registrar.class})
    spring的底层导入注解@import给容器中导入一个组件:导入的组件Registrar.class
    将主配置类(@SpringBootApplication标注的类)的包以及下面所有子包扫描进配置类
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Import({Registrar.class})
    public @interface AutoConfigurationPackage {
    }

    @Import({AutoConfigurationImportSelector.class})

    给容器中导入组件,导入的就是后面的类的组件

    导入的组件以全路径类名的方式返回,这些组件就会被添加到容器中

    会给容器导入非常多层次的自动配置类:XXXAutoConfiguration就是给容器中导入自动配置的组

    6,SpringInitializer快速创建springboot项目

    默认生成的springboot项目

    主程序已经生成好了,我们只需要我们自己的逻辑

    resource文件夹的目录架构

    static保存静态资源:js/css/image

    templates:保存所有的模板页面 :(spring Boot默认jar包使用嵌入式的tomcat)可以使用模板引擎

    application.properties:springboot应用的配置文件

    二、配置文件

    1、配置文件

    springboot使用的是一个全局的我配置文件,配置文件名是固定的

    application.properties

    application.yml

    配置文件的作用,就是修改springboot的默认值

    yaml(yaml ain`t Markup language)

    标记语言

    以前的配置文件都是XXX.xml

    properties:

        server.port=8080;

    yml

        server:  
    port: 8081

    xml

    <server>
    <port>8082</port>
    </server>

    2、yml语法

    1,基本语法

    K: V表示一对键值对(空格必须要)

    以空格的缩进来控制层级关系:只要是左对齐的一列数据,都是一个层级的

        server:  
    port: 8081
    path:/hello

    2,值的写法

    字面量:普通的值(数字,字符串,布尔)

    k:v字面直接来写字符串不用加引号

    "":双引号 不会转义特殊字符 --->换行

    '':单引号 会转义特殊字符 --->

    对象 Map(属性和值)(键值对)

    k:v 对象还是这种方式

    friend:

    lastName: zhangsan

    age: 20

    行内写法

    friend: {lastName: zhangsan,age: 20}

    数组(list,set)

    用-短横线表示数组中的一个元素

    pets:
    -cat
    -dog

    行内写法

    pets: [cat,dog]

    3,@value获取值和@ConfigurationProperties获取值比较

     @CONFIGURATIONPROPERTIES@VALUE
    功能 批量注入 单个注入
    松散语法 支持 不支持
    SpEL 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型封装 支持 不支持

    配置文件yml还是properties都能获取到值

    如果说,我们只是在配置文件中获取某个值使用@Value来何配置文件

    如果说,我们专门编写一个JavaBean,我们就直接使用@ConfigurationProperties

     

    /*
    * 将配置文件的值映射到配置文件中(
    * @ConfigurationProperties 把配文件的值和Person的属性进行绑定
    * */
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
      // @Value("${person.last-name}")
      private String lastName;

    @PropertySource加载制定配置文件&@ImportSource

    @PropertySource

    @PropertySource(value = {"classpath:application.properties"})
    @Component
    @ConfigurationProperties(prefix = "person")

    @ImportSource导入spring配置文件 让里面的内容生效

    Spring Boot里面没有spring的配置文件,我们自己写的也没办法生效

     

    @ImportResource(locations = {"classpath:beans.xml"})

    Spring Boot推荐添加组件方式

    推荐使用全注解的方式

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd>
      <bean id="helloService" class="com.xja.hellodemo2.demo.service.HelloService"></bean>
    </beans>

    1配置类====spring配置文件

    /*
    * @Configuration当前类是个配置类
    * <bean>添加
    * */
    @Configuration
    public class MyAppConfig {
    //将方法的返回值添加到容器中,容器中这个组件默认id就是方法名
      @Bean
      public HelloService helloService(){
          System.out.println("成了");
          return new HelloService();
      }

    }

    4、配置文件占位符

    1、随机数

    person.last-name= zhangsan${random.uuid};
    person.age=${random.int}
    //随机数
    

    2、占位符获取之前配置的值,如果没有:默认值

    person.dog.name=${person.hello:hello}_dog
    //默认值
    
  • 相关阅读:
    Ubuntu Linux 开发者笔记本
    jQuery – 随机排列 item
    MemberwiseClone 关于 string 浅拷贝的一个误解
    在Mac OS X中配置Apache + PHP + MySQL
    ASP.NET MVC 3和Razor中的@helper 语法
    textpattern 在 nginx 上的 rewrite 规则
    错误:无法将带[]的索引应用于ConnectionStringsCollection类型的表达式
    F# 3.0新特性简介
    开发中状态到底用数字还是字符串
    将网站中用户上传的零散小文件存储在MongoDB中的.net解决方案
  • 原文地址:https://www.cnblogs.com/liudongshuai/p/11638130.html
Copyright © 2011-2022 走看看