SpringBoot(一)——注解配置

2023-10-31

文章目录

一、简介

1、概述
  • SpringBoot是Spring一个全新的框架,用来简化Spring应用程序的创建和开发,简化了ssm框架开发的过程。
  • 使用SpringBoot之后,可以说是抛弃了繁琐的xml文件配置过程,采用大量默认配置来简化开发过程。
  • 采用了SpringBoot可以非常容易和快速的创建基于Spring框架的应用程序,让各方面的配置变得更加简单。
2、特性

能够快速创建基于Spring的应用程序
能够直接使用java main方法启动内嵌的Tomcat,Jetty服务器运行SpringBoot程序,不需要部署war包文件
提供约定的starter POM简化了Maven的配置,使Maven的配置变得更简单
根据项目的Maven依赖配置,SpringBoot自动配置Spring,SpringMVC
提供了程序的健康检查等功能
基本可以实现完全不使用xml来配置文件,采用注解配置

3、四大核心
  • 自动配置:针对很多应用程序和常见的应用功能,SpringBoot能自动提供相关配置
  • 起步依赖:告知SpringBoot需要什么功能就可以自动引入所需要的依赖库
  • Actuator:可以深入运行SpringBoot,探查内部信息
  • 命令行界面:可选择性

二、搭建环境

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
等待下载完成即可
在这里插入图片描述

三、入门小程序–HelloWorld

创建一个springboot应用类,也就是像我们mvc的index.jsp一样的那个启动类,起名叫HelloWorldMainApplication
用@SpringBootApplication标注、说明这是一个SpringBoot应用类,然后再创建一个Controller的class,和SpringBoot应用类连接上,即可完成。
在这里插入图片描述

@SpringBootApplication
public class HelloWorldMainApplication {

    public static void main(String[] args) {

        //Spring应用启动
        SpringApplication.run(HelloWorldMainApplication.class, args);
    }
}
@Controller
public class HelloController {

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "hello world!";
    }
}

@SpringBootApplication: SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;

@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 {

@SpringBootConfiguration:Spring Boot的配置类;

标注在某个类上,表示这是一个Spring Boot的配置类;
@Configuration:配置类上来标注这个注解;
配置类 ----- 配置文件;配置类也是容器中的一个组件;@Component
@EnableAutoConfiguration:开启自动配置功能;
以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器
EnableAutoConfigurationImportSelector:导入哪些组件的选择器;
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;

四、配置文件

1、YML文件

之前我们使用.properties文件来配置我们需要的功能,我们也可以使用.yml方式来配置
在resources文件下创建一个application.yml,在里面编写即可。

server:
  port: 8081
2、YML语法
<1>、基本语法

k:(空格)v:表示一对键值对(空格必须有);
空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的,并且属性和值也是大小写敏感。

<2>、值的写法
(1)、字面量(数字、字符串、布尔)

k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “lisi \n wangwu”:输出;lisi 换行 wangwu
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘lisi \n wangwu’:输出;lisi \n wangwu

(2)、对象、Map

k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v方式

friends:
		lastName: wangwu
		age: 40

行内写法:

friends: {lastName: wangwu,age: 40}
(3)、数组(List, Set)

用- 值来表示数组中的一个元素

pets:
 - cat
 - dog
 - elephant

行内写法:

pets: [cat,dog,pig]
(4)、简单实现、基于以上的语法

首先编写一个主类Person,写几个私有属性,并且补上get、set方法

package com.example.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String lastName;
    private Integer age;
    private boolean boss;
    private Date birth;
    private Map<String, Object> map;
    private List<Object> list;
    private Dog dog;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public boolean isBoss() {
        return boss;
    }

    public void setBoss(boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", map=" + map +
                ", list=" + list +
                ", dog=" + dog +
                '}';
    }
}

Dog类中声明了name和age,进行yml文件的配置

person:
  lastName: zpw
  age: 19
  boss: true
  birth: 1998/01/01
  map: {k1: v1, k2: 11}
  list:
   - zz
   - pp
  dog:
   name: ww
   age: 2

编写测试方法:

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot02ConfigApplicationTests {

    @Autowired
    Person person;
    
    @Test
    public void contextLoads() {
        System.out.println(person);
    }
}

直接运行程序即可。
这时我们思考如何使用properties文件来配置。
在配置之前、我们需要在设置中修改一个配置、不然会出现乱码
在这里插入图片描述
这时,我们可以在properties中配置达到和yml相同的效果

person.last-name=zpw
person.age=10
person.birth=2019/09/9
person.boss=true
person.list=a,b
person.map.k1=1
person.map.k2=12
person.dog.name=dog
person.dog.age=2
3、配置文件注入
<1>、@PropertySource

编写的类,默认加载配置都会从resources目录下加载application.properties和application.yml文件的配置,但是我们也可以按照自己的想法去读取自己所创建的配置文件。
在这里插入图片描述

person.last-name=zz
person.age=10
person.birth=2019/09/9
person.boss=true
person.list=a,b
person.map.k1=1
person.map.k2=12
person.dog.name=dog
person.dog.age=2

在Person类上加上一个注解即可。

@PropertySource(value = {"classpath:person.properties"})
<2>、@ImportResource

导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;需要将@ImportResource标注在一个配置类上

@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class Springboot02ConfigApplication {

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

beans.xml配置文件如下:

<?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.example.service.HelloService"></bean>
    
</beans>

测试方法:

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot02ConfigApplicationTests {
    @Autowired
    ApplicationContext ioc;

    @Test
    public void testHelloService(){
        boolean b = ioc.containsBean("helloService");
        System.out.println(b);
    }
}

以上俩种方法都是手动添加组件来完成配置;
SpringBoot推荐给容器中添加组件的方式:推荐使用全注解的方式
1、配置类@Configuration------>Spring配置文件
2、使用@Bean给容器中添加组件

/**
 * 指明当前类是一个配置类
 */
@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService(){

        System.out.println("配置类@Bean给容器中添加组件了");
        return new HelloService();
    }
}

将beans.xml配置注释,再进行测试,也是可以成功的。

4、配置文件占位符

可以使用随机数:

${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}

占位符获取之前配置的值,如果没有可以是用:指定默认值

person.last-name=zz${random.uuid}
person.age=${random.int}
person.birth=2019/09/9
person.boss=true
person.list=a,b
person.map.k1=1
person.map.k2=12
person.dog.name=${person_hello:hello}_dog
person.dog.age=2
5、Profile

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境

<1>、多Profile文件

我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;

<2>、yml支持多文档块方式
server:
  port: 8888
spring:
  profiles:
    active: dev
# 默认使用8888,一旦为激活状态就会转换为dev就是8083
---
server:
  port: 8083
spring:
  profiles: dev

---
server:
  port: 8084
spring:
  profiles: prod
<3>、激活指定Profile

1、在配置文件中指定 spring.profiles.active=dev,即可切换到开发模式
2、命令行:
java -jar springboot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
3、虚拟机参数;
-Dspring.profiles.active=dev

6、配置文件的加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件
–file:./config/(根目录下的config目录下)
–file:./ (根目录下)
–classpath:/config/ (resources的config目录下)
–classpath:/ (resources目录下)
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置
我们还可以通过spring.config.location来改变默认的配置文件位置:前提是项目已经打好包,可以使用命令行参数来修改。

7、自动配置原理
<1>、SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration
<2>、@EnableAutoConfiguration 作用
  • 利用EnableAutoConfigurationImportSelector给容器中导入一些组件
  • 可以查看selectImports()方法的内容;
  • List configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候选的配置
    将 类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到容器中;
<3>、每一个自动配置类进行自动配置功能
<4>、以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理
@Configuration   //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@EnableConfigurationProperties(HttpEncodingProperties.class)  //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把HttpEncodingProperties加入到ioc容器中

@ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效;    判断当前应用是否是web应用,如果是,当前配置类生效

@ConditionalOnClass(CharacterEncodingFilter.class)  //判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;

@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)  //判断配置文件中是否存在某个配置  spring.http.encoding.enabled;如果不存在,判断也是成立的
//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
public class HttpEncodingAutoConfiguration {
  
  	//他已经和SpringBoot的配置文件映射了
  	private final HttpEncodingProperties properties;
  
   //只有一个有参构造器的情况下,参数的值就会从容器中拿
  	public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
		this.properties = properties;
	}
  
    @Bean   //给容器中添加一个组件,这个组件的某些值需要从properties中获取
	@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
		return filter;
	}

根据当前不同的条件判断,决定这个配置类是否生效。

<5>、所有的配置类都是在不同的Properties类中进行封装的
@ConfigurationProperties(prefix = "spring.http.encoding")  //从配置文件中获取指定的值和bean的属性进行绑定
public class HttpEncodingProperties {

   public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

总结
1)、SpringBoot启动会加载大量的自动配置类
2)、查看我们需要的功能有没有SpringBoot默认写好的自动配置类;
3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们需要用的组件有,我们就不需要再来配置)
4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;

xxxxAutoConfigurartion:自动配置类;
给容器中添加组件
xxxxProperties:封装配置文件中相关属性;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot(一)——注解配置 的相关文章

  • mysql锁总结

    参考文章 MySQL 死锁查询 事务与锁详解2 MySQL死锁系列 常见加锁场景分析 死锁的成因 场景以及死锁的避免 查询锁sql 1 查看当前的事务 SELECT FROM INFORMATION SCHEMA INNODB TRX 2
  • 解决centos下sudo运行tshark,写入文件显示:Permission denied.

    在 w时 需要把文件名写全 相对路径无权限 则需要写成绝对路径 比如 sudo tshark w home xxxx mypcap pcap 下面的不行 sudo tshark w mypcap pcap Permission denied
  • 走线和交互式布线_画PCB时,一些非常好的布线技巧

    画PCB时 一些非常好的布线技巧 布线是PCB设计过程中技巧最细 限定最高的 即使布了十几年布线的工程师也往往觉得自己不会布线 因为看到了形形色色的问题 知道了这根线布了出去就会导致什么恶果 所以 就变的不知道怎么布了 但是高手还是有的 他
  • spring cloud 2021.0.1升级踩坑记录

    一 版本说明 升级前的版本 spring boot 2 2 2 RELEASE spring cloud Hoxton SR1 spring cloud alibaba 2 2 0 RELEASE 升级后版本 spring boot 2 6
  • linux测试代码段运行时间,如何精确测量一段代码的执行时间

    原标题 如何精确测量一段代码的执行时间 本文转载自西邮Linux兴趣小组 最近在工作中遇到了需要精确测量一段C代码执行时间的需求 这里有三种方案供大家选择 1 gettimeofday 2 2 rdtsc rdtscp 3 clock ge
  • 工程师的自我修养:全英文技术学习实践

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 引子 2016年9月 上海GOPS大会现场 Site Reliability Engineering 一书的作者之一 来自Google的Chris Jones在做分享 Ch
  • linux内核添加模块,linux中添加内核模块

    1 内核模块简介 Linux 内核的 整 体结构 非 常 庞 大 其 包 含 的 组 件也 非 常多 如 何使用 需 要 的 组 件 呢 方 法 一 把 所有的 组 件都 编译 进 内核 文 件 即 zImage 或bzImage 但 这样
  • 【MYSQL基础】SQL-DML(数据操作语言)

    文章目录 一 DML 介绍 二 DML 语法 2 1DML 添加 插入数据 2 2DML 修改 更新数据 2 3DML 删除数据 一 DML 介绍 DML Data Manipulation Language 数据操作语言 用来对数据库中表
  • 华夏大盘精选基金经理王亚伟:08年做不好会赔钱

    编者按 华夏基金投资决策委员会主席 华夏大盘精选基金经理王亚伟在华夏基金08年投资策略报告会上对明年资本市场的走势发表了自己的看法 王亚伟 尊敬的各位领导 各位来宾 下午好 刚才两位名嘴很精彩 现在基金行业总体来说是越来越娱乐化了 基金经理
  • 12. XPath解析入门

    目录 前言 模块安装 XPath涉及的基本概念 XPath基本语法 测试完整代码 XPath进阶用法 需求1 让xpath处理这个资源文件 需求2 找到标签位置 如html标签 需求3 找到无序列表 ul 中每一项 li 包裹的文本内容 需
  • 树莓派——配置Linux内核适合树莓派

    文章目录 将linux内核代码和编译工具tools上传到ubuntu 树莓派等芯片带操作系统的启动过程 不带操作系统的 带操作系统的 BootLoader的工作流程 树莓派Linux源码目录树分析 树莓派Linux源码配置 Linux源码特
  • 【数据结构】插入排序 & 希尔排序

    目录 插入排序 希尔排序 插入排序 时间复杂度 O N 2 空间复杂度 O 1 稳定性 稳定 void InsertSort int arr int size for int i 0 i lt size 1 i int end i int
  • easyexcel 第一次导入导出会报错com.alibaba.excel.exception.ExcelAnalysisException,所以自定义excel导入导出表格

    报错原因 由于easyexcel导入导出时如果存在null会报错 跟踪源码com alibaba excel analysis v07 XlsxSaxAnalyser parseXmlSource 查看xmlReader parse 发现这
  • vi 操作

    vi filename c vi 457 filename c 打开文件同时跳至457行 exc 由输入状态退出到控制命令状态 shirt zz 保存并退出 w 保存退出 q 不保存退出 457 跳至457行 set nu 在前面列出行号
  • 大数据教育平台数据仓库系统搭建 附安装包与脚本

    一 数仓项目需求及架构设计 数据仓库是为企业所有级别的决策制定过程 提供所有类型数据支持的战略集合 数据仓库是出于分析报告和决策支持目的而创建的 为需要业务智能的企业 提供指导业务流程改进 监控时间 成本 质量以及控制 1 项目需求分析 数
  • Xilinx软件开发: 用仿真器在XSCT下加载u-boot

    XSCT介绍 XSCT全称叫做Xilinx Software Command Line Tool 顾名思义是Xilinx提供的软件命令行工具 完整的使用说明可以参考ug1208 xsct reference guide 我们平常调试裸机程序
  • Gradle 5.0 更新介绍

    Gradle 5 0正式版出来有几天了 这个工具的发展速度还真是惊人 前些天我看到gradle 5 rc版的时候还在想正式版什么时候出 没想到rc版没过几天正式版就出来了 那么正好 就来介绍一下gradle 5 0正式版加入的一些新功能吧
  • json字段 react_react 解析json

    Copyright 2013 2017 David Caldwell Permission to use copy modify and or distribute this software for any purpose with or
  • Python的sort函数和sorted、lambda和cmp

    1 sort和sorted 我们需要对List进行排序 Python提供了两个方法 对给定的List L进行排序 方法1 用List的成员函数sort进行排序 方法2 用built in函数sorted进行排序 从2 4开始 iterabl

随机推荐

  • STM32移植lwip之建立tcp服务器

    本篇目标 在之前能ping通pc机的工程基础上搭建tcp连接 并可以收发数据 在网络调试工具上显示 材料准备 基础工程 修改后能ping通pc机的工程 STM32官方移植lwip修改代码 调试工具 用来调试tcp连接下的数据接收 网络调试助
  • QT从入门到入土(七)——鼠标事件

    引言 个人认为 事件机制是Qt最难以理解且最为精妙的一部分 事件主要分为两种 在与用户交互时发生 比如按下鼠标 mousePressEvent 敲击键盘 keyPressEvent 等 系统自动发生 比如计时器事件 timerEvent 等
  • 嵌入式系统-CAT1025 EEPROM芯片自学报告

    一 芯片简介 CAT1025 是基于微控制器系统的存储器和电源监控的完全解决方案 它利用低功耗 CMOS 技术将 2K 位的串行 EEPOM 和用于掉电保护的系统电源监控电路集成在一块芯片内 存储器采用 400KHz 的 I2C 总线接口
  • 搜索引擎solr系列---高亮配置及问题总结

    solr的高亮配置有两种方式 一种是配置形式 具体是在配置文件中配置的 该方式我没有用过 所以我这里就不写它了 另一种就是以代码的形式 我只会用这种方式 所以只写这部分 其实还要一种就是自我实现 这个更简单粗暴 1 高亮的代码具体如下 pa
  • 数据结构—散列表(哈希表)的原理以及Java代码的实现

    本文详细介绍了散列表的概念 散列函数的选择 散列冲突的解决办法 并且最后提供了一种散列表的Java代码实现 数组的特点是寻址容易 插入和删除困难 而链表的特点是寻址困难 插入和删除容易 而对于tree结构 它们的查找都是先从根节点进行查找
  • ElasticSearch 简介及基本操作

    简介 什么是ElasticSearch ElasticSearch 简称 ES 是基于Apache Lucene构建的开源搜索引擎 是当前最流行的企业级搜索引擎 Lucene本身就可以被认为迄今为止性能最好的一款开源搜索引擎工具包 但是lu
  • vue+element-ui初体验入门拥有自己的前台项目以及配置文件讲解(1)vue项目创建

    阿丹 之前一直在写jsp页面 自从发现vue可以支持更好看更高级的页面效果之后开始研究一下 这篇文章 可以带领兄弟们简单的得到实现一个简易的自己vue项目 如果想部署服务器上 可以参考阿丹的部署vue的文章哈 准备工作 编译工具 idea
  • python后端学习(五)迭代器、生成器、协程

    迭代器 迭代是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从集合的第一个元素开始访问 直到所有的元素被访问完结束 迭代器只能往前不会后退 1 可迭代对象 我们已经知道可以对list tuple str等类型的数据
  • CoreData之MagicalRecord源码解读

    CoreData之MagicalRecord源码解读 CoreData 与SQLite 说到数据持久化 很难让人不想到又爱又恨的CoreData 说到CoreData可能大多数人就是想到的繁琐 最直接的原因就是使用CoreData涉及的类特
  • “极狐•华为HI版本”的尴尬与困境

    2021年4月上海汽车展 发生了一起震惊中国汽车界的营销事件 华为在车展的前4天 4月15日 发布了一段高级辅助驾驶的演示视频 图1 在4月15日发布的视频中 2块显示屏叠在一起 告诉我们这是测试车 这个视频当中 汽车的内饰是和普通的电动轿
  • Qt程序的打包案例

    1 在Qt内构建并运行release 2 在运行后生成的文件夹中找到 exe后缀文件 然后复制 到桌面创建一个新文件夹 如login文件夹 3 在桌面创建一个文件夹 名字可以随意取 equip system 把刚复制的exe粘贴到里边 4
  • Flink主要组件以及工作流程

    Flink简介 Flink 是一个框架和分布式处理引擎 用于对无界和有界数据流 批处理和流处理 进行有状态计算 并且 Flink 提供了数据分布 容错机制以及资源管理等核心功能 Flink提供了诸多高抽象层的API以便用户编写分布式任务 D
  • 基于深度学习的无人驾驶道路检测

    最近在自学深度学习 网上有很多计算机视觉比赛和资源 比如kaggle 天池 百度飞浆 paddle现在做得越来越好 于是我就选择了百度飞浆 支持国产开源框架 也自己跑通了代码 以此记录一下学习过程 若有纰漏 恳请各位大佬多多指点 目录 一
  • EasyExcel导出案例(只有你想不到)

  • 红黑、B、B+————数据结构//复习复习复习

    二叉排序树 树型操作鼻祖 其他树的增删查都如此 平衡二叉树 查找效率最高 但维护成本高 对平衡二叉树的插入操作而言 其本质上比二叉排序树 BST 的插入操作多了一个平衡操作 解决了二叉排序树插入操作可能出现的斜树 不平衡问题 我们以插入一个
  • 【Python】刷题常用语法汇总

    Python刷题常用语法汇总 一 字符串操作 字符串是不可更改的对象 因此无法直接修改字符串的某一位字符 一种可行的方式是 将字符串转换为列表 修改列表的元素后 再重新连接为字符串 s thisisastring l list s l 0
  • Java代码实现本地创建文件,读取文件,删除指定目录下的文件

    目录 一 需求 二 实现 1 完成创建文件 写入文件 2 读取文件 3 删除文件 测试 注意 java的split方法分割字符串 分隔符如 及注意点 一 需求 1 创建文件夹 以规定格式保存信息到指定文件 并存放在相应目录下 2 在保存的目
  • 第一次实验:Protocol Layers

    第一次实验 Protocol Layers 捕获跟踪 Pick a URL and fetch it with wget or curl 检查跟踪 数据包结构 协议开销 复用密钥 Which Ethernet header field is
  • 服务器出现TIME_WAIT和CLOSE_WAIT的原因以及解决方法

    来自 http blog csdn net shootyou article details 6622226 昨天解决了一个HttpClient调用错误导致的服务器异常 具体过程如下 http blog csdn net shootyou
  • SpringBoot(一)——注解配置

    文章目录 一 简介 1 概述 2 特性 3 四大核心 二 搭建环境 三 入门小程序 HelloWorld 四 配置文件 1 YML文件 2 YML语法 lt 1 gt 基本语法 lt 2 gt 值的写法 1 字面量 数字 字符串 布尔 2