【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);}}
总结步骤
- @Configuration编写注册类
- 在配置类中,自定义方法,给容器注册组件,配合@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*/
可以根据自己的需求按需修改或者添加