当前位置: 首页 > news >正文

【Springboot】项目Demo

学习Day01

目录

  • 学习Day01
    • 1、创建项目
      • 1.1 创建一个空项目
      • 1.2 创建controller项目
      • 1.3 SpringBoot应用打包
    • 2、Spring Initializr创建向导
    • 3、给容器中配置组件类(注解)
    • 4、条件注解
    • 5、属性绑定
    • 6、IDEA创建类自动生成注解

1、创建项目

springboot官方文档
mvnrepository

1.1 创建一个空项目

1. 创建项目

在这里插入图片描述

2. 创建maven模块
在这里插入图片描述
在这里插入图片描述
3. 添加以下代码并刷新pom依赖
导入场景

<!--  所有springboot项目都必须继承spring-boot-starter-parent  --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.13</version></parent>
<!-- web开发的场景启动器 --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

4. 创建启动主类
在这里插入图片描述

5. 启动结果404(因为此时还没有请求)
在这里插入图片描述

1.2 创建controller项目

1、创建controller包下的HelloController.java

package boot.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;/*** @author dszn* @creat 2025/4/16 8:49* @Description*/
//@ResponseBody  //返回josn或纯文本数据而不是跳转页面
//@Controller@RestController //以上两个注解的合体
public class HelloController {@GetMapping("/hello")public String hello() {return "hello";}
}

2、测试发送hello请求
在这里插入图片描述

1.3 SpringBoot应用打包

1、更新pom依赖

<!--springboot应用打包插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2、maven更新并打包
在这里插入图片描述
打包完成后在target文件夹下面
在这里插入图片描述
3、运行jar包(系统已有java运行环境)
找到jar包所在的target文件夹,在文件地址处输入cmd
输入命令java -jar (自己jar包的名字).jar
在这里插入图片描述
启动成功,可以在浏览器访问

(tips)
1、在cmd启动之前记得把IDEA控制台上的启动关闭,避免端口冲突
2、cmd启动要确保自己电脑上已经成功配置了jdk17以上版本,可以使用java -version查看jdk版本(不能用java -v

4、SpringBoot便携式修改配置
依靠jar包可以很方便的修改像端口号这类的配置
在jar包的同级目录新建一个application.properties文件(集中式管理配置)
官方支持的所有配置
在这里插入图片描述

修改 server.port=8888
重新启动
在这里插入图片描述
端口号已经修改成功

2、Spring Initializr创建向导

在这里插入图片描述

选择项目需要的场景并创建
在这里插入图片描述
如果新创建的项目的pom依赖没有被识别,请手动添加
在这里插入图片描述
启动类已经自动生成
其余按1中编写即可

3、给容器中配置组件类(注解)

@Configuration@Bean 注解可以替代传统的XML文件
(@Configuration 注解用于标记一个类为 Spring 的配置类。这个类可以包含多个 @Bean 注解的方法,Spring 会将这些方法返回的对象注册为 Spring 容器中的 Bean。)
项目结构
在这里插入图片描述
User.java

package com.dszr.boot.bean;/*** @author dszn* @creat 2025/4/16 11:34* @Description*/public class User {private Long id;private String name;public String getName() {return name;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public void setName(String name) {this.name = name;}
}

AppConfig.java

package com.dszr.boot.config;import com.dszr.boot.bean.User;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Scope;/*** @author fmzh* @creat 2025/4/16 11:33* @Description*/@Import(ObjectIdGenerators.class) //给容器中放指定类型的组件,组件默认名字是全类名(与Bean注册不同)
@SpringBootConfiguration //这是一个springboot配置类 和下面的没什么区别
//@Configuration //这是一个配置类,替代以前的配置文件 配置类本身也是容器中的组件
public class AppConfig {/*** 1、组件默认是单实例的* @return*/@Scope("prototype")//将组件转为多实例@Bean("user01") //替代以前的Bean标签 组件在容器中的名字默认是方法名,也可以直接修改注解名public User user01(){User user = new User();user.setId(1l);user.setName("里斯");return user;}
}

测试

package com.dszr.boot;import com.dszr.boot.bean.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Boot302demoApplication {public static void main(String[] args) {var ioc = SpringApplication.run(Boot302demoApplication.class, args);//        for (String name : ioc.getBeanDefinitionNames()){
//            System.out.println(name);
//        }String[] forType = ioc.getBeanNamesForType(User.class);for(String s : forType) {System.out.println(s);}//验证是否是单实例Object user01 =  ioc.getBean("user01");Object user02 =  ioc.getBean("user01");System.out.println(user01 == user02);}}

总结步骤

  1. @Configuration编写注册类
  2. 在配置类中,自定义方法,给容器注册组件,配合@Bean注解,或者使用@Import导入第三方组件

4、条件注解

@ConditionalOnClass 如果类路径中存在这个类,则触发指定行为

@ConditionalOnMissingClass 如果类路径中不存在这个类,则触发指定行为

@ConditionalOnBean 如果容器中存在这个组件(Bean),则触发指定行为

@ConditionalOnMissingBean 如果容器中不存在这个组件(Bean),则触发指定行为

场景描述

  • 如果存在ObjectIdGenerators这个类,就给容器放一个Cat组件,名为Cat01
  • 否则,给容器放一个User组件,名为User01
  • 如果系统中存在dog01这个组件,就给容器放一个User组件,名为zhangsan
  • 否则,就放一个User,名为lisi

实例验证
前提:FastsqlException是druid包下的一个类,提前导入druid依赖

package com.dszr.boot.config;
import com.alibaba.druid.FastsqlException;
import com.dszr.boot.bean.Cat;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.context.annotation.Bean;/*** @author dszn* @creat 2025/4/17 10:32* @Description*/
@ConditionalOnMissingClass(value = "com.alibaba.druid.FastsqlException")//放在类级别,如果注解判断生效,则整个配置类才生效
@Import(FastsqlException.class) //给容器中放指定类型的组件,组件默认名字是全类名(与Bean注册不同)
@SpringBootConfiguration
public class AppConfig2 {@ConditionalOnClass(name = "com.alibaba.druid.FastsqlException")@Beanpublic Cat cat01(){return new Cat();}@ConditionalOnMissingClass(value = "com.alibaba.druid.FastsqlException")@Beanpublic Cat dog01(){return new Cat();}@ConditionalOnBean(value = Dog.class)@Beanpublic User zhangsan(){return new User();}@ConditionalOnMissingBean(value = Dog.class)@Beanpublic User lisi(){return new User();}
}
在启动类中加入以下代码验证//        验证条件注解@ConditionalOnClassfor (String s : ioc.getBeanNamesForType(Cat.class)) {System.out.println("Cat:" + s);}//        验证条件注解@ConditionalOnMissingClassfor (String s : ioc.getBeanNamesForType(Dog.class)) {System.out.println("Dog:" + s);}//        验证条件注解@ConditionalOnMissingClassfor (String s : ioc.getBeanNamesForType(User.class)) {System.out.println("User:" + s);}

结果:控制台只打印Cat:cat01

5、属性绑定

将容器中任意组件(Bean)的属性值和配置文件的配置项的值进行绑定

  • 1、给容器中注册组件
  • 2、使用@ConfigurationProperties声明组件和配置文件的哪些配置进行绑定
    设置好UTF-8编码,否则控制台会中文乱码
    在这里插入图片描述

@ConfigurationProperties

新建Pig.java

package com.dszr.boot.bean;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @author dszn* @creat 2025/4/17 14:55* @Description*/@ConfigurationProperties(prefix = "pig")//属性绑定,和Properties文件中的pig绑定
@Component
public class Pig {private String name;private Integer age;private Long id;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}@Overridepublic String toString() {return "Pig{" +"name='" + name + '\'' +", age=" + age +", id=" + id +'}';}
}

application.properties

spring.application.name=boot3-02demo
pig.age=18
pig.id=2
pig.name=佩奇

MainApplication.java中测试

Pig pig = ioc.getBean(Pig.class);
System.out.println("Pig:"+ pig);

控制台输出
在这里插入图片描述

@EnableConfigurationProperties

  • 场景://SpringBoot默认只扫描自己主程序所在的包,如果导入第三方包,即使组件上标注了@Component、@ConfigurationProperties注解也没有用(组件扫描不进来)

新建Sheep.java

package com.dszr.boot.bean;import org.springframework.boot.context.properties.ConfigurationProperties;/*** @author dszn* @creat 2025/4/17 15:44* @Description*/
@ConfigurationProperties(prefix = "sheep")
public class Sheep {private String name;private Integer age;private Long id;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}@Overridepublic String toString() {return "Sheep{" +"name='" + name + '\'' +", age=" + age +", id=" + id +'}';}
}

AppConfig.java文件中

@EnableConfigurationProperties(Sheep.class)

application.properties

sheep.age=20
sheep.id=1
sheep.name=苏西

MainApplication.java中测试

        //测试EnableConfigurationProperties注解Sheep sheep = ioc.getBean(Sheep.class);System.out.println("Sheep:"+ sheep);

控制台输出
在这里插入图片描述

6、IDEA创建类自动生成注解

效果图
在这里插入图片描述
如图按步骤设置
在这里插入图片描述
在class中添加如下代码

/*** @author ${USER}* @creat ${DATE} ${TIME}* @Description*/

可以根据自己的需求按需修改或者添加

相关文章:

  • git rebase的使用
  • 某客户ORA-600 导致数据库反复重启问题分析
  • 如何判断单片机性能极限?
  • Linux 网络配置
  • OpenHarmony - 小型系统内核(LiteOS-A)(七)
  • GPT,Bert类模型对比
  • 16-算法打卡-哈希表-两个数组的交集-leetcode(349)-第十六天
  • 使用 PM2 启动node服务,并添加监控接口
  • Linux系统之restore命令的基本使用
  • d3.js绘制组合PCA边缘分布图
  • 数据结构(6)
  • MYOJ_11700(UVA10591)Happy Number(快乐数)(超快解法:图论思想解题)
  • 阿尔特拉 EP1C12F324I7N AlteraFPGA Cyclone
  • Redis——数据结构
  • 【ELF2学习板】OpenCL程序测试
  • 逻辑删除表结构如何加唯一索引?
  • Obsidian的简单使用
  • 【Semantic Kernel核心组件】Kernel:掌控AI编排的“中央处理器“
  • Java基础知识面试题(已整理Java面试宝典pdf版)
  • AbMole—如何高效诱导巨噬细胞的极化?
  • 白天气温超30℃的北京,晚间下起了冰雹
  • 长沙通报一出租房疑存非法代孕:查封涉事场所,相关人员被控制
  • 气象干旱黄色预警继续:陕西西南部、河南西南部等地特旱
  • 巴基斯坦空袭印度多地空军基地,巴战机进入印领空
  • 秦洪看盘|交易型资金收缩,释放短线压力
  • 央行谈MLF:逐步退出政策利率属性回归流动性投放工具