Spirngboot3+Vue3-0125

Spirngboot3+Vue3-0125

扫描配置文件
@Value
@ConfigurationProperties(prefix = "email")

扫描bean
@ComponentScan

bean注册
-三方的bean
@Bean注册bean
@Bean("自定义名称")

@Import


设置bean注册的条件
 @Conditional

-自己的bean
@Repository
@Service
@Controller

1.概述

1.1概述

Springboot是spring的子项目,快速构建spring的子程序。

SpringData是用于数据获取的。

springFramework是核心功能

springSecurity是认证授权的

springAMQP 消息传递的

springcloud是服务治理的

 

其他所有的都必须依赖于springframework

1.2传统的方式进行构建

  • 上面的依赖非常的依赖。非常的繁琐。

  • 配置繁琐,声明大量的bean对象

起步依赖是完成了功能的坐标的设置,springboot直接完成了相关依赖的整合。不需要一个一个的依赖引入了。

完成了下面的操作了。

约定大于配置。

不需要声明bean了,自动注入bean对象了,不需要手动的声明了。

其他特性:

  • 内嵌tomcat,jetty,不用部署war

  • 外部化配置

  • 不需要xml配置,变成yml

1.3 总结

1.4创建方式

创建maven项目

导入起步依赖

编写控制器

提供启动类

需要设置Java17

 

 

2.配置文件

2.1基本使用

# 应用服务 WEB 访问端口
server:
#  端口
  port: 8080
#  虚拟目录
  servlet:
    context-path: /api


yml好处是结构清晰

2.2常见的配置

三方的配置

自定义的配置

引入依赖
设置配置信息
获取配置信息
2.2.1 写并获取。@Value注解

将常见的变量配置信息写到自己的需要写的地方

# 自定义相关配置
email:
  user: zhangsan@qq.com
  code: 123456
  host: localhost
  auth: true

多层级用·连接

@Component
public class EmailParam {

    @Value("${email.user}")
    private String user;

    @Value("${email.code}")
    private String  code;

    @Value("${email.host}")
    private String  host;

    @Value("${email.auth}")
    private boolean  auth;

}

使用的时候直接注入就可以了。

要是直接采用new 对象的方式的话是获取不到的

2.2.2写并获取。@ConfigurationProperties(prefix = "email")
# 自定义相关配置
email:
  user: zhangsan@qq.com
  code: 123456
  host: localhost
  auth: true

用@ConfigurationProperties注解的时候需要写上对应的get和set方法

@Component
@ConfigurationProperties(prefix = "email")
public class Email {
    
    private String user;
    private String  code;
    private String  host;
    private boolean  auth;
    
    //get 和set方法必须写不然对应不上啊!!!
}

2.3整合mybatis

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名',
  `password` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
  `phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '注册手机号',
  `info` json NOT NULL COMMENT '详细信息',
  `status` int(11) DEFAULT '1' COMMENT '使用状态(1正常 2冻结)',
  `balance` int(11) DEFAULT NULL COMMENT '账户余额',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `username` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1674613593516396925 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';

依赖

<!--        mysql-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>


<!--        mybatis-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.1</version>

配置文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: root
    username: root
    url: jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false&requireSSL=false
@Mapper
public interface UserMapper extends BaseMapper<User> {

    @Select("select * from user where id = #{id}")
    public User findById(@Param("id") Long id);
}

3.Bean扫描

3.1bean扫描 @ComponentScan

启动类的

@SpringBootApplication等价于

默认是在启动类所在的包和子包。

可以自己写

@ComponentScan(basePackages = "com.example")

3.2Bean注册

3.3bean注册-三方的用@Bean

<!--       引入三方的-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>test01</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

注册bean

@Configuration
public class TestConfig {

    @Bean
    public User test1User(){
        return new User();
    }

}

使用刚才注册的bean

  @Autowired
  private User test1User;

起个bean的名字

@Bean("自定义名称")

3.4bean注册-@Import

主要导入配置类和接口实现类

spring会把这个类放到容器中。相当于手动的扫描。

数组的形式也可以

 

@Import({TestConfig.class})

采用ImportSelector接口实现类也是可以的。

第一步实现ImportSelector接口

public class CommonImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        //写的是全命名
        return new String[]{"com.example.tes2.config.TestConfig"};
    }
}

第二步导入

3.5自己写组合注解

@Target({ElementType.TYPE}) //类上使用
@Retention(RetentionPolicy.RUNTIME) //运行时可以用
@Import(CommonImportSelector.class)
public @interface EnableCommonConfig {

}

 此时就自定义了一个注解

@EnableCommonConfig

模拟bean读取配置文件的内容

u:
  name: zhangsan
  age: 30

 

@Configuration
public class TestConfig {

    @Value("${u.name}")
    private String name;

    @Value("${u.age}")
    private Integer age;

    @Bean
    public User test1User(){
        User u = new User();
        u.setAge(age);
        u.setName(name);
        return u;
    }
}

等价于

@Configuration
public class TestConfig {

    @Bean
    public User test1User(@Value("${u.name}") String name , @Value("${u.age}")  Integer age){
        User u = new User();
        u.setAge(age);
        u.setName(name);
        return u;
    }

}

3.6设置bean注册的条件 @Conditional

    /*
    * 如果配置文件中配置和指定的信息则注入否则不注入
    * */
    @Bean
    @ConditionalOnProperty(prefix = "u", name = {"name", "age"})
    public User test1User(@Value("${u.name}") String name , @Value("${u.age}")  Integer age){
        User u = new User();
        u.setAge(age);
        u.setName(name);
        return u;
    }

 

如果当前引入了xxx则注入否则不注入

    @ConditionalOnClass(UserService.class)

4.自动配置原理

我们将自定义组件配置成自动注册的组件。

就是引入starter就实现了自动注入bean。

 项目A:

项目B:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全桥变压器计算2

1 根据输入最高电压与磁通密度计算出来原边的圈数 2 根据输入输入电压计算出来原副边圈数 3 输入功率计算 4 根据输入功率计算DC输出的平均值,有效值,峰值电流 5根据副边电感感量,然后写出励磁电感的表达式 6 根据写出理想变压器原边绕组电流表达式<

中级ccnp多久可以考下来?ccnp 课件哪里有?

思科中级CCNP考试要求考生具备一定的网络基础知识&#xff0c;包括IP地址规划、VLAN配置、STP协议等。然而&#xff0c;对于许多初学者来说&#xff0c;中级CCNP考试的难度和门槛都是一个不小的挑战。那么&#xff0c;究竟需要多久才能考下中级CCNP证书呢?下面将为你详细解读。…

CodeGPT

GitCode - 开发者的代码家园 gitcode.com/ inscode.csdn.net/liujiaping/java_1706242128563/edit?openFileMain.java&editTypelite marketplace.visualstudio.com/items?itemNameCSDN.csdn-codegpt&spm1018.2226.3001.9836&extra%5Butm_source%5Dvip_chatgpt_c…

SIP UPDATE method

UPDATE 在RFC3311中定义。 UPDATE 允许客户端更新session的参数&#xff0c;例如媒体流集及其codec&#xff0c;但对dialog的状态没有影响。从这个意义上说&#xff0c;它就像re-INVITE&#xff0c;但与re-INVITE不同&#xff0c;因为UPDATE是在intial INVITE完成之前发送(MT发…

锂电池升6V输出3A芯片。2.7v-5.5v输入,输出6v给马达供电

锂电池升压输出芯片是一种常见的电子元件&#xff0c;广泛应用于各种电子设备中。本文将介绍一款锂电池升压输出芯片&#xff0c;AH8681可以将2.7V-5.5V的输入电压升压至6V&#xff0c;电流可达3A&#xff0c;内置MOS管。 该锂电池升压输出芯片具有以下特点&#xff1a; 1. 输…

代理模式-C#实现

该实例基于WPF实现&#xff0c;直接上代码&#xff0c;下面为三层架构的代码。 目录 一 Model 二 View 三 ViewModel 一 Model using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 设计模式练…

技术必备:推荐一款超强接口管理神器 Apifox

去年&#xff0c;给大家推荐了一款新面市不久的接口测试神器&#xff1a;Apifox&#xff0c;最近一年&#xff0c;Apifox官方又发布了一些新特性&#xff0c;趁此机会&#xff0c;再给大家分享一波。 简单来说&#xff0c;Apifox它是集&#xff1a;接口文档管理、接口调试、Mo…

php框架laravel项目中错误与解决方案

在 Laravel 中&#xff0c;项目解决方案通常包括一系列的组件、模式和约定&#xff0c;用于快速开发高质量的 Web 应用程序。下面是一段关于 Laravel 项目解决方案的简短介绍&#xff1a; "Laravel 提供了一个完整的项目解决方案&#xff0c;旨在帮助开发人员快速构建可靠…

什么是Vue.js的响应式系统?如何实现数据的双向绑定?

目录 一、Vue.js介绍 二、响应式系统 三、数据的双向绑定 四、如何实现数据的双向绑定 一、Vue.js介绍 Vue.js 是一种用于构建用户界面的渐进式 JavaScript 框架。它由尤雨溪开发并于2014年首次发布。Vue.js 的核心库只关注视图层&#xff0c;其设计灵感来自于 Angular 和…

如何使用Docker安装Spug并实现远程访问本地运维管理界面

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

PaddleOCR将自己训练的模型转换为openvino格式模型

1 训练模型 python train_steelseal_det.py2 checkpoints模型转换为inference 模型 加载配置文件ch_PP-OCRv4_det_student_steelseal.yml&#xff0c;从./output/ch_PP-OCRv4/best_model/目录下加载model模型&#xff0c;inference模型保存在./output/ch_PP-OCRv4/best_model…

Pandas ------ 向 Excel 文件中写入含有合并表头的数据

Pandas ------ 向 Excel 文件中写入含有合并表头的数据 推荐阅读引言正文 推荐阅读 Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据 引言 这里给大家介绍一下如何向 Excel 中写入带有合并表头的数据。 正文 import pandas as pddf1 pd.D…

代码随想录 Leetcode226.翻转二叉树

题目&#xff1a; 代码(首刷看解析 2024年1月25日&#xff09;&#xff1a; class Solution { public:TreeNode* invertTree(TreeNode* root) {if(root nullptr) return root;swap(root->left,root->right);invertTree(root->left);invertTree(root->right);retu…

09.Elasticsearch应用(九)

Elasticsearch应用&#xff08;九&#xff09; 1.搜索结果处理包括什么 排序分页高亮返回指定字段 2.排序 介绍 Elasticsearch支持对搜索结果排序&#xff0c;默认是根据相关度算分来排序 支持排序的字段 keyword数值地理坐标日期类型 排序语法 GET /[索引名称]/_sear…

C# 使用AutoMapper实现类映射

写在前面 AutoMapper是一个用于.NET中简化类之间的映射的扩展库&#xff1b;可以在执行对象映射的过程&#xff0c;省去的繁琐转换代码&#xff0c;实现了对DTO的快速装配&#xff0c;有效的减少了代码量。 通过NuGet安装&#xff0c;AutoMapper&#xff0c; 由于本例用到了D…

Altair SimSolid常见问题解答 衡祖仿真

Q&#xff1a;SimSolid究竟有什么特别之处&#xff1f; A&#xff1a;Altair SimSolid是专为设计工程师开发的结构分析软件且非常有创新性。它消除了传统 FEA 中特别耗时和非常专业的两项庞大任务——几何结构简化和网格划分&#xff0c;是一场仿真变革。简而言之&#xff0c;…

再识C语言 DAY12 【再识函数(上)】

文章目录 前言一、函数是什么&#xff1f;二、自定义函数参数返回值void修饰函数的返回值和参数 函数不能嵌套定义形参和实参的区别return的用法补充if……else if……else……的用法 后面会讲解“函数调用&#xff0c;函数声明以及函数原型&#xff0c;块级变量&#xff0c;归…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-11 HTML5 表单验证

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>HTML5 表单验证</title> </head><body> <form action"#" method"get" novalidate>请输入您的邮箱:<input type&q…

CNN卷积理解

1 卷积的步骤 1 过滤器&#xff08;卷积核&#xff09;&#xff08;Filter或Kernel&#xff09;&#xff1a; 卷积层使用一组可学习的过滤器来扫描输入数据&#xff08;通常是图像&#xff09;。每个过滤器都是一个小的窗口&#xff0c;包含一些权重&#xff0c;这些权重通过训…

DAY11_(简易版)VUEElement综合案例

目录 1 VUE1.1 概述1.1.1 Vue js文件下载 1.2 快速入门1.3 Vue 指令1.3.1 v-bind & v-model 指令1.3.2 v-on 指令1.3.3 条件判断指令1.3.4 v-for 指令 1.4 生命周期1.5 案例1.5.1 需求1.5.2 查询所有功能1.5.3 添加功能 2 Element2.0 element-ui js和css和字体图标下载2.1 …