首页 > 其他分享 >SpringBoot入门

SpringBoot入门

时间:2023-06-07 14:55:45浏览次数:31  
标签:SpringBoot 配置 class 自动 User 组件 public 入门

HelloWorld

需求:浏览器发送/hello请求,响应 Hello,Spring Boot

  创建springboot项目

主程序类

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

  创建controller控制层

//@ResponseBody//发送浏览器
//@Controller//控制层
//结合体
@RestController
public class HelloController {
//@ResponseBody//返回浏览器字符串
    @RequestMapping("/hello")
    public String hello(){return "hello,Spring Boot";
    }
}

  简化配置

application.properties

#修改端口号
server.port=8888

 

 

了解自动配置原理

1.SpringBoot特点

1.1依赖管理

  父项目做依赖管理

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

他的父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.0.RELEASE</version>
</parent>

几乎声明了所有开发中常用的版本号,自动版本仲裁机制

  开发导入starter场景启动器

1.见到很多spring-boot-starter-*:就某种场景
2.只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3.SpringBoot所有支持的场景

 

  无需关注版本号,自动版本仲裁

  可以修改版本号

1.查看spring-boot-dependencies里面规定当前依赖的版本 用的key
2.在当前项目里面重写配置
    <properties>
        <mysql.version>5.1.43</mysql.version>
    </properties>

1.2自动配置

  自动配好Tomcat

    引入Tomcat依赖

    配置Tomcat

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

  自动配好SpringMVC

    引入SpringMVC全套组件

    自动配好了SpringMVC常用组件(功能)

  自动配好Web常见功能,如:字符编码问题

    SpringBoot帮我们配置好了所有web开发的常见场景

  默认的包结构

    主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来

    无需以前的包扫描配置

    想要改变扫描路径,@SpringBootApplication(scanBasePackages = "com.example")//扫描指定包

       或者:@ComponentScan()指定扫描路径

  各种配置拥有默认值

    默认配置最终都是映射到MultipartProperties

    配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

  按需加载所有自动配置项

    非常多的starter

    引入了哪些场景这个场景的自动配置才会开启

    SpringBoot所有的自动配置功能都在

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>2.0.0.RELEASE</version>
      <scope>compile</scope>
    </dependency>

  ....

 

容器功能

 组件添加

@Configuration

  基本使用

  Full模式与Lite模式

    最佳实战 

      配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断 

      配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式

 

/**
 * 1.配置类里面使用Bean标注在方法上给容器注册组件,默认是单实例的
 * 2.配置类本身也是组件
 * 3.
 */
//@Configuration(proxyBeanMethods =  true)//注入组件
@Configuration
public class MyConfig {

    /**
     * 外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */
    @Bean//给容器中添加组件,以方法名作为id,返回类型就是组件类型,返回的值,就是组件在容器中保存的实例
    public User user01(){
        User zhangsan = new User("张三", 15);
        //user组件依赖per组件
        zhangsan.setPet(per01());
        return zhangsan;
    }

    @Bean("tom")//自定义组件名称
    public Pet per01(){
        return new Pet("二哈");
    }
}

主程序 :

/**
 * 主程序类
 * @SpringBootApplicatio:这是一个springboo应用
 */
//@SpringBootApplication(scanBasePackages = "com.example")//扫描指定包
@SpringBootApplication
public class Boot01HelloworldApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Boot01HelloworldApplication.class, args);
        //查看容器组件
        String[] names = run.getBeanDefinitionNames();//获取组件
        for (String name : names) {//遍历输出
            System.out.println("组件:"+name);
        }

        //从容器中获取组件
        User user01 = run.getBean("user01", User.class);

        User user02 = run.getBean("user01", User.class);

        System.out.println("组件:"+(user01  == user02));
        //获取配置类
        MyConfig bean = run.getBean(MyConfig.class);
//        System.out.println(bean);
        //从配置类中获取组件
        User user = bean.user01();
        System.out.println(user);

        //
        User user011 = run.getBean("user01", User.class);
        Pet tom = run.getBean("tom", Pet.class);
        System.out.println("用户宠物:"+(user011.getPet() == tom));

    }
}

  @Bean:注入容器

  @Component:组件

  @Controller:控制层(控制器 )

  @Service:业务层 (业务逻辑组件)

  @Repository:dao层(数据库层组件)

 

@Conditional

条件装配:满足Conditional指定的条件 ,则进行组件注入

/**
 * 1.配置类里面使用Bean标注在方法上给容器注册组件,默认是单实例的
 * 2.配置类本身也是组件
 *
 * 4.@Import({User.class, DBHelper.class})//导入组件
 *      给容器中自动创建出这两个类型的组件,默认组件的名字就是全类名
 *
 */
//@Configuration(proxyBeanMethods =  true)//注入组件
@Import({User.class, DBHelper.class})//导入组件
@Configuration
//条件装配
//@ConditionalOnBean(name = "tom") //有:全部注入
@ConditionalOnMissingBean(name = "tom")//没有:全部注入
public class MyConfig {

    /**
     * 外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */
    @Bean//给容器中添加组件,以方法名作为id,返回类型就是组件类型,返回的值,就是组件在容器中保存的实例
    public User user01(){
        User zhangsan = new User("张三", 15);
        //user组件依赖per组件
        zhangsan.setPet(per01());
        return zhangsan;
    }

    //@Bean("tom")//自定义组件名称
    public Pet per01(){
        return new Pet("二哈");
    }
}

主程序:

        //判断是否有此组件
        boolean tom1 = run.containsBean("tom");
        System.out.println("容器中是否有此组件:"+tom1);

 

@ImportResource

需求:注入Spring的配置文件

@ImportResource("classpath:beans.xml")
public class MyConfig {

主程序:

        boolean bean = run.containsBean("user");
        System.out.println("user:"+bean);

 

配置绑定

如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以随时使用:(开启此注解无需在sql层中开启此注解@Component)

@EnableConfigurationProperties(Car.class)//开启属性配置功能(要绑定的对象) 1.开启对象配置绑定功能   2.把这个对象这个组件自动注册到容器中
public class MyConfig {

 

自动配置原理入门

  引入加载自动配置类

 1.@SpringBootConfiguration

  @Configuration:代表当前就是一个配置类

2.@ComponentScan

  指定扫描哪些:Spring注解;

3.@EnableAutoConfiguration:启用自动配置

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

  1.@AutoConfigurationPackage

     自动配置包

@AutoConfigurationPackage
@Import({AutoConfigurationPackages.Registrar.class})//给容器中导入一个组件
public @interface AutoConfigurationPackage {

//利用Registrar给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来 主程序所在包下

  2.@Import({AutoConfigurationImportSelector.class})

   利用方法给容器中导入组件

@Import({User.class, DBHelper.class})//导入组件
public class MyConfig {

 

最佳实践SpringBoot应用如何编写

引入场景依赖

 官方文档

查看自动配置了哪些(选做)

  自己分析,引入场景对应的自动配置一般都生效了

  配置文件中debug=true可以开启配置报告

  true:开启

  false:不开启

 

是否需要修改

  参照文档修改配置项

  分析,xxx类绑定了配置文件哪些

  自定义加入或者替换组件

    @Bean,@Component

 

最佳实践-Lombok简化开发

Lombok用标签方式代替构造器,get/setter,toString()等鸡肋代码

springboot已经管理Lombok。引入依赖

        <!-- 简化代码开发(set get toString) -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

如何安装:IDEA中File--Plugins,搜索安装Lombok插件

使用:

@Data
@ToString
@NoArgsConstructor//无参
//@AllArgsConstructor//有参
@EqualsAndHashCode//eq和hash方法
public class User {

简化日志开发

@Slf4j//日志
//@ResponseBody//发送浏览器
//@Controller//控制层
//结合体
@RestController
public class HelloController {

    //@ResponseBody//返回浏览器字符串
    @RequestMapping(value = "/hello")
    public String hello(@RequestParam("name") String name){
        log.info("请求进来了....");
        return "hello,Spring Boot"+ "你好" + name;
    }
}

 

最佳实践-dev-tools

Spring Boot包括一组额外的工具,可以让应用程序开发体验更加愉快。spring-boot devtools模块可以包含在任何项目中,以提供额外的开发时功能--链接

每当类路径上的文件发生更改时,使用spring-boot-devtools的应用程序就会自动重新启动。当在IDE中工作时,这可能是一个有用的功能,因为它为代码更改提供了非常快速的反馈循环。默认情况下,类路径上指向某个目录的任何条目都会受到更改监控。请注意,某些资源(如静态资产和视图模板)不需要重新启动应用程序--链接

触发重新启动

由于DevTools监视类路径资源,触发重新启动的唯一方法是更新类路径。导致类路径更新的方式取决于您正在使用的IDE:

在Eclipse中,保存修改后的文件会导致类路径更新并触发重新启动。

在IntelliJ IDEA中,构建项目(构建->构建项目)(快捷方式:Ctrl+F9)具有相同的效果

依赖:

        <!-- 热部署启动 Ctrl + F9 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

在IDEA中,项目或者页面修改以后:Ctrl+F9。

 

配置文件-yaml的用法

同以前的properties用法

YAML是“YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写,在开发这种语言时,YAML的意思其实是“Yet Another Markup Language”(仍是一种标记语言)

非常适合用来做以数据中心的配置文件

基本语法

  key:value:kv之间有空格

  大小写敏感

  使用缩进表示层级关系

  缩进不允许使用tab,只允许空格

  缩进的空格数不重要,只要相同层级的元素左对齐即可

  '#'表示注释

  字符串无需加引号,如果要加,单引号,双引号" "表示字符串内容会被转义,不转义

数据类型

  字面量:单个的,不可再分的值,date、boolean、string、number、null

k : v

  对象:键值对的集合,map,hash,set,object

#行内写法:  

k: {k1:v1,k2:v2,k3:v3}

#或

k: 
  k1: v1
  k2: v2
  k3: v3

数组:一组按次序排序的值,array,list,queue

#行内写法:  

k: [v1,v2,v3]

#或者

k:
 - v1
 - v2
 - v3

实例:

@Data
public class Person {
    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Pet pet;
    private String[] interests;
    private List<String> animal;
    private Map<String, Object> score;
    private Set<Double> salarys;
    private Map<String, List<Pet>> allPets;
}

@Data
public class Pet {
    private String name;
    private Double weight;
}

用yaml表示以上对象

person:
  userName: zhangsan
  boss: false
  birth: 2019/12/12 20:12:33
  age: 18
  pet: 
    name: tomcat
    weight: 23.4
  interests: [篮球,游泳]
  animal: 
    - jerry
    - mario
  score:
    english: 
      first: 30
      second: 40
      third: 50
    math: [131,140,148]
    chinese: {first: 128,second: 136}
  salarys: [3999,4999.98,5999.99]
  allPets:
    sick:
      - {name: tom}
      - {name: jerry,weight: 47}
    health: [{name: mario,weight: 47}]

 

SpringMVC自动配置概览

Spring Boot为Spring MVC提供了自动配置,可以很好地与大多数应用程序配合使用。(大多场景我们都无需自定义配置)

自动配置在Spring的默认设置之上添加了以下功能:

包含ContentNegotiatingViewResolver和BeanNameViewResolver bean。

 

内容协商视图解析器和BeanName视图解析器
  Support for serving static resources, including support for WebJars (covered later in this document)).

    静态资源(包括webjars)
  Automatic registration of Converter, GenericConverter, and Formatter beans.

    自动注册 Converter,GenericConverter,Formatter
  Support for HttpMessageConverters (covered later in this document).

    支持 HttpMessageConverters (后来我们配合内容协商理解原理)
  Automatic registration of MessageCodesResolver (covered later in this document).

    自动注册 MessageCodesResolver (国际化用)
Static index.html support.

  静态index.html 页支持
  Custom Favicon support (covered later in this document).

  自定义 Favicon
  Automatic use of a ConfigurableWebBindingInitializer bean (covered later in this document).

自动使用 ConfigurableWebBindingInitializer ,(DataBinder负责将请求数据绑定到JavaBean上)

 

标签:SpringBoot,配置,class,自动,User,组件,public,入门
From: https://www.cnblogs.com/qihaokuan/p/17457729.html

相关文章

  • Matlab GUI编程入门
    先吐槽下,我看得是出版社的优秀教材,虽说是二等奖,《Matlab与控制系统仿真实践》第3版,北京航空航天大学出版社赵广元编著,想着入门,找本国内的书快速入门。谁知道一个上午就这么过去了。以一个控制系统典型环节演示为例,课本从P95开始:一、准备工作,设置下显示组件的名称与图标HOME-......
  • Apache Solr 教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介ApacheSolr是一个开源搜索服务器。Solr是用Java语言开发的,主要基于HTTP和ApacheLucene实现。存储在ApacheSolr中的资源存储为Document对象。ApacheSolr入门教程-从基本概念开始,简单易学地了解ApacheSolr,其中包括概述,搜索引擎基础知识,Windows环境,Had......
  • springboot集成swagger
    引入并配置引入依赖这里引入的是3版本<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version></dependency>配置拦截器(若有,则配置)该配置是在有使用到拦截器,例如鉴权的拦截,就需要配置拦截器放......
  • SpringBoot之Spring Data JPA入门学习
    JPA(JavaPersistenceAPI)Java持久化API,是Java持久化的标准规范,Hibernate是持久化规范的技术实现,而SpringDataJPA是在Hibernate基础上封装的一款框架。一、添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</a......
  • springBoot自动装配机制
    自动配置原理@SpringBootApplication是一个组合注解,由@ComponentScan、@EnableAutoConfiguration和@SpringBootConfiguration组成@SpringBootConfiguration与普通@Configuration相比,唯一区别是前者要求整个app中只出现一次@ComponentScanexcludeFilters-用......
  • 记一次用SpringBoot默认连接池HikariCP拿不到连接问题
    记一次用SpringBoot默认连接池HikariCP拿不到连接问题1、问题发现最近项目总接到反馈有用户登录不上系统情况,通过查看日志,并验证多次访问都是正常。2、排查问题安装pinpoint监控后,通过pinpoint监控发现确实会存在获取连接超时情况,如下图查看最近访问情况,发现存在大量超时情况,如下......
  • 机器学习入门-用Java实现简单感知机
    一、通俗理解机器学习1、机器学习是人工智能的一种,如图所示,它是人工智能的一个子方向。2、机器学习有点像人类的学习过程。1.人类学习通过经验(事件),归纳出规律。2.机器学习通过数据,训练出模型。3、机器学习不是基于编程形成的直接结果,不是代码直接写出一个模型y=-0.......
  • 基于JAVA的springboot+vue人事管理系统、员工工资管理系统,附源码+数据库+论文+PPT
    1、项目介绍考虑到实际生活中在人事管理方面的需要以及对该系统认真的分析,将系统权限按管理员和员工这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页,个人中心,员工管理,部门管理,员工考勤管理,请假申请管理,加班申请管理,员工工资管理,招聘计划管理,员工培训管理,部......
  • 【如何入门Python】
    (文章目录)人生苦短,我用Python。欢迎大家一起分享,你是如何入门Python的~方向一:你是如何学习/自学Python的?学习/自学Python的步骤如下:了解Python的基础知识:了解Python的语法、变量、数据类型、算术操作、流程控制语句、函数、模块和包等基础知识。学习Python的核......
  • 一.机器学习入门
    一:图像领域包括人脸识别,街道交通信号识别二:自然语言识别(NPL) 机器学习定义:机器学习是从数据中自动分析获得模型,并利用模型对未知数据进行预测。 数据集的构成:特征值+目标值 机器学习的分类:1.监督学习(有一个目标的)    目标值:类别--分类问题(比如说识别猫狗,目标是......