@ConfigurationProperties注解使用方法(内含源代码)

news2024/9/22 5:36:40

@ConfigurationProperties注解使用方法(内含源代码)

源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87400774

目录

  • @ConfigurationProperties注解使用方法(内含源代码)
  • `源代码下载链接地址:`[https://download.csdn.net/download/weixin_46411355/87400774](https://download.csdn.net/download/weixin_46411355/87400774)
    • 前言
    • 一、Spring配置方式
      • 1.1 第一阶段:xml配置
      • 1.2 第二阶段:注解配置
      • 1.3 第三阶段:Java配置(java config)
    • 二、@ConfigurationProperties使用方法
    • 三、使用场景
      • 3.1 作用于方法
        • 3.1.1 使用场景(`配置读写分离`)
        • 3.1.2 读写分离 案例实操
          • 3.1.2.1 数据库的创建
          • 3.1.2.2创建并搭建项目
          • 3.1.2.3 添加依赖
            • druid启动器的依赖
            • MySQL 5 的依赖
            • jpa的依赖 (spring-boot-starter-data-jpa)
          • 3.1.2.4 JavaBean对象
          • 3.1.2.5 application.properties配置文件
          • 3.1.2.6 配置类
          • 3.1.2.7 测试类
        • 3.1.3问题与解答
          • 问题:
          • 解答与分析:
          • 案例实操
      • 3.2 作用于Class类及其用法
        • 3.2.1 数据库的创建
        • 3.2.2创建并搭建项目
        • 3.2.3 添加依赖
            • 3.2.3.1 druid启动器的依赖
            • 3.2.3.2 MySQL 5 的依赖
            • 3.2.3.3 jpa的依赖 (spring-boot-starter-data-jpa)
        • 3.2.4 application.properties配置文件内容
        • 3.2.5 JavaBean对象
        • 3.2.6 Controller层
        • 3.2.7运行启动类测试
    • 四、总结

前言

最近在思考使用java config的方式进行配置,java config是指基于java配置的spring。传统的Spring一般都是基本xml配置的,后来spring3.0新增了许多java config的注解,特别是spring boot,基本都是清一色的java config。

一、Spring配置方式

1.1 第一阶段:xml配置

在spring 1.x时代,使用spring开发满眼都是xml配置的bean,随着项目的扩大,我们需要把xml配置文件分放到不同的配置文件中,那时候需要频繁地在开发的类和配置文件间切换。

1.2 第二阶段:注解配置

spring 2.x时代,随着JDK1.5带来的注解支持,spring提供了声明bean的注解,大大减少了配置量。这时spring圈子存在一种争论:注解配置和xml配置究竟哪个更好?我们最终的选择是应用
的基本配置用xml,业务配置用户注解。

1.3 第三阶段:Java配置(java config)

    从spring 3.x到现在,spring提供了Java配置的能力。使用Java配置更好的理解配置的bean。
    spring 4.x和spring boot都推荐使用Java配置

    Spring IOC有一个非常核心的概念——Bean。由Spring容器来负责对Bean的实例化,装配和管理。
    XML是用来描述Bean最为流行的配置方式。但随着Spring的日益发展,越来越多的人对Spring提出了批评。"Spring项目大量的滥用XML"就是最为严厉的一个批评。
    由于Spring会把几乎所有的业务都以Bean的形式配置在XML文件中,造成了大量的XML文件。使用XML来配置Bean失去了编译时的类型安全检查。大量的XML配置使得整个项目变得更加复杂。

    随着JAVA EE 5.0的发布,其中引入了一个非常重要的特性——Annotations(注释)。注释是源代码的标签,这些标签可以在源代码层进行处理或通过编译器把它融入到class文件中。在Java EE5以后的版本中,注释成为了一个主要的配置选项。
    Spring使用注释来描述Bean的配置与采用XML相比,因为类注释是在一个类源代码中,可以获得类型安全检查的好处。可以良好的支持重构。

    JavaConfig就是使用注释来描述Bean配置的组件。
    JavaConfig是Spring的一个子项目,比起Spring,它还是一个非常年轻的项目。目前的版本是1.0 M2。使用XML来配置Bean所能实现的功能,通过JavaConfig同样可以很好的实现。

二、@ConfigurationProperties使用方法

下面具体讲一讲@ConfigurationProperties使用方法.

@ConfigurationProperties

Spring源码中大量使用了@ConfigurationProperties,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。

@ConfigurationProperties注解源码

在这里插入图片描述

可以看到,该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上

我们来看一下注解说明
在这里插入图片描述
Annotation for externalized configuration. Add this to a class definition or a @Bean method in a @Configuration class if you want to bind and validate some external Properties (e.g. from a .properties file).
用于外部化配置的注释。如果您想绑定和验证一些外部属性(例如,从. Properties文件中),可以将此添加到类定义或@Configuration类中的@Bean方法中。

可以从注解说明中看到,当将该注解作用于方法上时,如果想要有效的绑定配置,那么该方法需要有@Bean注解且所属Class需要有@Configuration注解

简单一句话概括就是:Spring的有效运行是通过上下文(Bean容器)中Bean的配合的完成的,Bean可以简单理解成对象,有些对象需要指定字段内容,那么这些内容我们可以通过配置文件进行绑定,然后将此Bean归还给容器。

三、使用场景

3.1 作用于方法

3.1.1 使用场景(配置读写分离

比较常见的就是配置读写分离的场景。

3.1.2 读写分离 案例实操

3.1.2.1 数据库的创建

数据库powernode_springboot-datasource-druid
表user

/*
 Navicat Premium Data Transfer

 Source Server         : MySQL57_13306
 Source Server Type    : MySQL
 Source Server Version : 50738
 Source Host           : localhost:13306
 Source Schema         : powernode_springboot-datasource-druid

 Target Server Type    : MySQL
 Target Server Version : 50738
 File Encoding         : 65001

 Date: 21/01/2023 12:02:32
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

drop database if exits `powernode_springboot-datasource-druid`
create database powernode_springboot-datasource-druid;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Jone', 18, 'test1@baomidou.com');
INSERT INTO `user` VALUES (2, 'Jack', 20, 'test2@baomidou.com');
INSERT INTO `user` VALUES (3, 'Tom', 28, 'test3@baomidou.com');
INSERT INTO `user` VALUES (4, 'Sandy', 21, 'test4@baomidou.com');
INSERT INTO `user` VALUES (5, 'Billie', 24, 'test5@baomidou.com');
INSERT INTO `user` VALUES (6, 'HHH', 23, '3541434135@qq.com');
INSERT INTO `user` VALUES (7, 'Andy', 23, '3541434135@qq.com');

SET FOREIGN_KEY_CHECKS = 1;
3.1.2.2创建并搭建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.2.3 添加依赖
druid启动器的依赖
   <!--druid启动器-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>
MySQL 5 的依赖
  <!--mysql-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
jpa的依赖 (spring-boot-starter-data-jpa)
<!-- jpa依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
3.1.2.4 JavaBean对象
package com.bjpowernode.springboot02at_configurationproperties_anno04datasource.pojo;

import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;

import javax.persistence.criteria.CriteriaBuilder;

@Data
@Accessors(chain = true)
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String email;
}
3.1.2.5 application.properties配置文件
#数据源
#写数据
spring.datasource.druid.write.url=jdbc:mysql://localhost:13306/powernode_springboot-datasource-druid
spring.datasource.druid.write.username=root
spring.datasource.druid.write.password=root
spring.datasource.druid.write.driver-class-name=com.mysql.jdbc.Driver
#读数据
spring.datasource.druid.read.url=jdbc:mysql://localhost:13306/powernode_springboot-datasource-druid
spring.datasource.druid.read.username=root
spring.datasource.druid.read.password=root
spring.datasource.druid.read.driver-class-name=com.mysql.jdbc.Driver
3.1.2.6 配置类

DruidDataSourceConfig.java

package com.bjpowernode.springboot02at_configurationproperties_anno04datasource.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration
public class DruidDataSourceConfig {

    /**
     * DataSource配置
     * @return
     */

    @Bean(name="readDruidDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.druid.read")
    public DataSource readDruidDataSource(){
        return new DruidDataSource();
    }

    /**
     * DataSource配置
     * @return
     */
    @Primary
    @Bean(name = "writeDruidDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.druid.write")
    public DataSource writeDruidDataSource(){
        return new DruidDataSource();
    }
}
3.1.2.7 测试类
package com.bjpowernode.springboot02at_configurationproperties_anno04datasource;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.bjpowernode.springboot02at_configurationproperties_anno04datasource.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.statements.SpringRepeat;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@SpringBootTest
class Springboot02AtConfigurationpropertiesAnno04DatasourceApplicationTests {

    @Autowired
    @Qualifier("readDruidDataSource")
    private DruidDataSource readDruidDataSource;

    @Test
    public void testReadDataSource() throws SQLException {
        System.out.println(readDruidDataSource);
        System.out.println(readDruidDataSource.getClass().getName());

        DruidPooledConnection connection = readDruidDataSource.getConnection();
        System.out.println("connection = " + connection);

        PreparedStatement preparedStatement = connection.prepareStatement("select * from user");
        ResultSet resultSet = preparedStatement.executeQuery();
        List<User> userList = new ArrayList<>();
        while(resultSet.next()){
            User user = new User();

            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            int age = (int)resultSet.getObject("age");
            String email = resultSet.getObject("email").toString();

            user.setId(id).setName(name).setAge(age).setEmail(email);

            userList.add(user);
        }

        userList.forEach(System.out::println);

       resultSet.close();
       preparedStatement.close();
       connection.close();
    }

    @Autowired
    @Qualifier("writeDruidDataSource")
    private DruidDataSource writeDruidDataSource;

    @Test
    public void testWriteDataSource() throws SQLException {
        System.out.println(writeDruidDataSource);
        System.out.println(writeDruidDataSource.getClass().getName());

        DruidPooledConnection connection = writeDruidDataSource.getConnection();
        System.out.println("connection = " + connection);

        String insertSql = "insert into user values(?,?,?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(insertSql);
        preparedStatement.setObject(1,null);
        preparedStatement.setString(2,"Bob");
        preparedStatement.setInt(3,23);
        preparedStatement.setObject(4,"3541434135@qq.com");

        int result= preparedStatement.executeUpdate();
        System.out.println("result = " + result);

        preparedStatement.close();
        connection.close();
    }



}

3.1.3问题与解答

问题:

也许有的人看到这里会比较疑惑,prefix并没有指定配置的全限定名那它是怎么进行配置绑定的呢?

解答与分析:

相信大家肯定了解@Value注解它可以通过全限定名进行配置的绑定

这里的 ConfigurationProperties其实就类似于使用多个@Value同时绑定
绑定的对象就是DataSource类型的对象,而且是 隐式绑定 的,
意味着在配置文件编写的时候需要与对应类的字段名称 相同
比如上述spring.datasource.druid.write.url=jdbc:mysql://localhost:13306/powernode_springboot-datasource-druid
当然了,你也可以随便写个配置,比如 spring.datasource.druid.write.uuu=www.baidu.com,此时你 只需要在注解中加上以下参数即可

在这里插入图片描述
这个参数代表:忽略类中未知的属性
字段不匹配

  • ignoreInvalidFields默认情况为true, 会自动忽略值类型不匹配的字段
  • 当ignoreInvalidFields=false手动关闭时, 如果值类型不匹配将会爆出java.lang.IllegalStateException异常
案例实操

在配置文件中加上一行spring.datasource.druid.write.uuu=www.baidu.com
在这里插入图片描述
修改配置类的代码
在DruidDataSourceConfig.java类中
写Druid数据源writeDruidDataSource上的@ConfigurationProperties上增加一个参数ignoreUnknownFields其默认值为true代表忽略类中未知的属性,将其值设为false则代表不忽略类中未知的属性

在这里插入图片描述

执行测试类出现异常信息
在这里插入图片描述

以上就完成了多个数据源的配置,为读写分离做了铺垫

3.2 作用于Class类及其用法

3.2.1 数据库的创建

数据库powernode_springboot-datasource-druid
表user

/*
 Navicat Premium Data Transfer

 Source Server         : MySQL57_13306
 Source Server Type    : MySQL
 Source Server Version : 50738
 Source Host           : localhost:13306
 Source Schema         : powernode_springboot-datasource-druid

 Target Server Type    : MySQL
 Target Server Version : 50738
 File Encoding         : 65001

 Date: 21/01/2023 12:02:32
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

drop database if exits `powernode_springboot-datasource-druid`
create database powernode_springboot-datasource-druid;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'Jone', 18, 'test1@baomidou.com');
INSERT INTO `user` VALUES (2, 'Jack', 20, 'test2@baomidou.com');
INSERT INTO `user` VALUES (3, 'Tom', 28, 'test3@baomidou.com');
INSERT INTO `user` VALUES (4, 'Sandy', 21, 'test4@baomidou.com');
INSERT INTO `user` VALUES (5, 'Billie', 24, 'test5@baomidou.com');
INSERT INTO `user` VALUES (6, 'HHH', 23, '3541434135@qq.com');
INSERT INTO `user` VALUES (7, 'Andy', 23, '3541434135@qq.com');

SET FOREIGN_KEY_CHECKS = 1;

3.2.2创建并搭建项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.3 添加依赖

3.2.3.1 druid启动器的依赖
   <!--druid启动器-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>
3.2.3.2 MySQL 5 的依赖
  <!--mysql-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
3.2.3.3 jpa的依赖 (spring-boot-starter-data-jpa)
<!-- jpa依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

3.2.4 application.properties配置文件内容

spring.datasource.url=jdbc:mysql://localhost:13306/powernode_springboot-datasource-druid?useUnicode=false&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

3.2.5 JavaBean对象

package com.bjpowernode.springboot02at_configurationproperties_anno04datasourceatclass.pojo;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "spring.datasource")
@Component
@Data
public class DataSourcePro {

    private String url;
    private String username;
    private String password;
    // 配置文件是driver-class-name,转驼峰命名便可以绑定成
    private String driverClassName;
    private String type;

}

3.2.6 Controller层

package com.bjpowernode.springboot02at_configurationproperties_anno04datasourceatclass.controller;

import com.bjpowernode.springboot02at_configurationproperties_anno04datasourceatclass.pojo.DataSourcePro;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/config")
public class ConfigurationPropertiesController {

    @Autowired
    private DataSourcePro dataSourcePro;

    @GetMapping("/test")
    public Map<String, Object> test(){
        Map<String,Object> map = new HashMap<>();

        map.put("url",dataSourcePro.getUrl());
        map.put("username",dataSourcePro.getUsername());
        map.put("password",dataSourcePro.getPassword());
        map.put("driverClassName",dataSourcePro.getDriverClassName());
        map.put("type",dataSourcePro.getType());

        return map;
    }


}

3.2.7运行启动类测试

浏览器输入localhost:8080/config/test
在这里插入图片描述

四、总结

@ConfigurationProperties@value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便

@ConfigurationProperties 的 POJO类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在POJO里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/182231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么识别截图中的文字?这三个方法让你轻松学会

在日常工作或学习中&#xff0c;我们会经常在网上查阅一些资料&#xff0c;当遇到一些优美的句子或者段落时&#xff0c;都会手动摘抄下来&#xff0c;这种记录方式不仅很耗时&#xff0c;还耗费精力&#xff0c;并且现在很多网站都已经不支持文本复制了&#xff0c;遇到这种情…

6.验证面试高频问题整理(附答案)

目录 Q126.top-down phase、bottom-up phase有哪些 Q127.为什么build_phase是top-down phase&#xff0c;connect_phase是bottom-up phase Q128.$size用于packed array和unpacked array分别得到的什么 Q129.class和struct的异同 Q130.class和module的异同 Q131.对象创建的…

MAC系统 LightGBM模型转为pmml格式

一、配置JAVA环境和Maven环境 参考以下两个博客即可 MAC 系统安装 JDK 及环境变量配置_蜗牛的博客-CSDN博客_mac jdk环境变量配置 MAC 系统安装 Maven 及环境变量配置_蜗牛的博客-CSDN博客_mac安装mpv 二、下载JPMML-LightGBM 先在Git上下载 直接下载或使用git clone http…

Aop切面编程原理和Spring实现

Aop切面编程概念 AOP切面编程一般可以帮助我们在不修改现有代码的情况下,对程序的功能进行拓展,往往用于实现 日志处理,权限控制,性能检测,事务控制等 AOP实现的原理就是动态代理,在有接口的情况下,使用JDK动态代理,在没有接口的情况下使用cglib动态代理 为Dao层所有的add方法…

字体反爬,一种来自字体设计师的跨行反爬案例 | 案例 28

本篇博客涉及的内容非常有价值&#xff0c;尤其是在反爬领域。 核心内容为自定义字体文件反爬。 文章目录准备工作在 Web 页面中使用字体文件整理文字编码Flask 中随机一串数字&#xff0c;渲染到前台总结准备工作 在正式编写代码前&#xff0c;需要先安装 FontCreator &#…

GeoServer学习笔记-01GeoSever运行编译

一、运行1. 下载GeoServerGitHub仓库地址&#xff1a;https://github.com/geoserver/geoserver2.本地代码工具打开项目在idea里&#xff0c;文件->新建->来自现有的源代码项目&#xff0c;选择项目的pom文件加载项目。3.idea编译环境设置&#xff08;1&#xff09;设置jd…

图论(5)最小生成树简单应用

活动 - AcWing 参考&#xff1a;《算法竞赛进阶指南》-lyd 目录 一、基础算法 二、 1.最短网络&#xff08;prim板子&#xff09; 2.局域网&#xff08;kruskal板子&#xff09; 3.繁忙的都市 4.1143. 联络员 5.连接格点&#xff08;预处理&#xff09; 一、基础算法…

影响电商发展的重要因素及电商未来的发展可能

易观分析&#xff1a;自从互联网传入中国以后&#xff0c;特别是2000年以后&#xff0c;一直保持着非常快的演变速度&#xff0c;而以互联网为基础的电商则更是发展成了中国互联网的代表性行业。中国电商的发展不仅在初期有着非常高的增速&#xff0c;有着多样化的演进路线&…

Numpy(3)—切片和索引、高级索引、Broadcast、迭代数组、广播迭代

1.切片和索引 eg1&#xff1a;我们首先通过 arange() 函数创建 ndarray对象。 然后&#xff0c;分别设置起始&#xff0c;终止和步长的参数为 2&#xff0c;7 和 2。 import numpy as npa np.arange(10) s slice(2, 7, 2) # 从索引 2 开始到索引 7 停止&#xff0c;间隔为…

【笔记】行人属性识别

【论文】https://arxiv.org/pdf/1901.07474.pdf &#xff08;以下序号与论文序列不对应&#xff09; 属性可以看作是高层语义信息&#xff0c;对视点变化和观察条件多样性具有更强的鲁棒性 本文试图解决以下几个重要问题: (1)传统和基于深度学习的行人属性识别算法之间的联系…

Java_Git:4. 分支管理

目录 1 创建合并分支 2 使用TortoiseGit实现分支管理 2.1 创建分支 2.2 合并分支 3 解决冲突 1 创建合并分支 Git会把每次的提交&#xff0c;串成一条时间线&#xff0c;即一个分支。 初始状态&#xff0c;Git只有一条时间线&#xff08;分支&#xff09;&#xff0c;这个分…

高级Spring之BeanFactory 后处理器

老样子&#xff0c;直接上代码演示&#xff0c;准备一个干净的容器&#xff1a; // ⬇️GenericApplicationContext 是一个【干净】的容器GenericApplicationContext context new GenericApplicationContext();//注册configBeancontext.registerBean("config", Conf…

【C语言学习笔记】39. 错误处理、递归

前言 C 语言不提供对错误处理的直接支持&#xff0c;但是作为一种系统编程语言&#xff0c;它以返回值的形式允许您访问底层数据。 错误处理 C 语言不提供对错误处理的直接支持&#xff0c;但是作为一种系统编程语言&#xff0c;它以返回值的形式允许您访问底层数据。在发生…

振弦采集模块配置工具VMTool的MODBUS 工具模块

振弦采集模块配置工具VMTool的MODBUS 工具模块 &#xff08; 1&#xff09; 寄存器查看 此功能模块提供标准的 MODBUS 协议寄存器显示及单个寄存器修改功能&#xff0c;通过点击扩展功能区的【 MODBUS】 标签切换到此模块&#xff0c;如下图所示。 此模块将 VMXXX 所有寄存器以…

Codeforces Round #847 (Div. 3) A~E

比赛链接&#xff1a;Dashboard - Codeforces Round #847 (Div. 3) - Codeforces 目录 A. Polycarp and the Day of Pi B. Taisia and Dice C. Premutation D. Matryoshkas E. Vlad and a Pair of Numbers A. Polycarp and the Day of Pi 题意&#xff1a;求出一个数字…

一步创建 AI 图像网站,即刻生成 AI 图像解决方案 #Graydient

过去一年当中&#xff0c;AI 画图工具非常火爆&#xff0c;一条简单的指令&#xff0c;就能快速得出超高品质的图形&#xff0c;这对于游戏开发者来说无疑是令人振奋的消息&#xff0c;尤其是没有预算和人手打造美术资源的中小团队。从网络上看到的结果来看&#xff0c;AI 的绘…

JDBC(powernode 文档)(内含源代码)

源代码下载地址链接&#xff1a;https://download.csdn.net/download/weixin_46411355/87400304 目录 JDBC概述 1.1 前言 1.2 什么是JDBC 1.3 JDBC的原理 1.4 程序员&#xff0c;JDBC&#xff0c;JDBC驱动的关系及说明 1.4.1 JDBC API 1.4.2 JDBC 驱动 1.4.3 Java程序员…

并发编程-多线程并发设计原理

并发编程-多线程&并发设计原理并发编程简介多线程&并发设计原理1 多线程回顾1.1 Thread和Runnable1.1.1 Java中的线程1.1.2 Java中的线程&#xff1a;特征和状态1.1.3 Thread和Runnable接口1.1.4 Callable1.2 synchronized关键字1.2.1 锁的对象1.2.2 锁的本质1.2.3 实现…

k8s实现controller如何远程调式?

背景&#xff1a; 使用kubebuilder和code-generate生成自定义资源代码后&#xff0c;实现管理自定义资源的controller逻辑。此时&#xff0c;需要调试controller代码逻辑&#xff0c;有2种思路。方法1&#xff1a;对该代码打包成镜像文件&#xff0c;直接部署进入k8s集群中&…

Springboot+vue中小企业合同管理系统

编写企业合同管理系统&#xff0c;让其能创建合同、修改合同、删除合同、合同变更标识、合同收款提醒、合同时间管理、合同废止标识、结束合同、合同统计、合同查询等几大功能。 (1) 创建合同 管理人员将签订后的合同的各项信息存入数据库中&#xff0c;使合同进入开始执行的…