




controller包是自己创建的

spingboot主程序
package com.example.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //加上这个注解,表示这是一个SpringBoot应用
public class Boot302DemoApplication {
public static void main(String[] args) {
SpringApplication.run(Boot302DemoApplication.class, args);
}
}
com.example.boot下创建controller包-再在该包下创建一个HelloController类
@ResponseBody //获取的是文本,而不是跳转页面的
@Controller
这两个注解相当于一个@RestController

运行主类
运行结果:

在浏览器中输入localhost:8080/haha

以上一个简单的Springboot项目测试完成
SpringBoot摒弃XML配置方式,改为全注解驱动
@Configuration、@SpringBootConfiguration
@Bean、@Scope
@Controller、 @Service、@Repository、@Component
@Import
@ComponentScan
举例:
新建bean包,再包下创建User和Cat两个类
新建config包,再该包下创建AppConfig类

User和Cat类下的内容
User类
package com.example.boot.bean;
public class User {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Cat类
package com.example.boot.bean;
public class Cat {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
AppConfig类
package com.example.boot.config;
import com.example.boot.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @description
* @author: Admin
* @create: 2023/12/7 9:35
*/
@Configuration //这是一个配置类,代替之前的配置文件
public class AppConfig {
//组件在容器中的名字是方法名
@Bean //该注解替代之前的bean标签,就是在ioc.xml里的配置的标签
public User user01(){
var user=new User();
user.setId(1L);
user.setName("小苏");
return user;
}
}
ioc.xml里的配置信息
运行主类:

再运行结果中查询user01

举例:

运行主类,再主类的结果中查询hahaha


与@Configuration注解差不多
@Import也是放在配置类中的

如果注解指定的条件成立,则触发指定行为
@ConditionalOnXxx
举例常见的
@ConditionalOnClass:如果类路径中存在这个类,则触发指定行为
@ConditionalOnMissingClass:如果类路径中不存在这个类,则触发指定行为
@ConditionalOnBean:如果容器中存在这个Bean(组件),则触发指定行为
@ConditionalOnMissingBean:如果容器中不存在这个Bean(组件),则触发指定行为
@ConfigurationProperties: 声明组件的属性和配置文件哪些前缀开始项进行绑定
@EnableConfigurationProperties:快速注册注解:
将容器中任意组件(Bean)的属性值和配置文件的配置项的值进行绑定
举例:
在配置文件(application.properties)中加入如下:

新建一个Pig类

Pig类
package com.example.boot.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @description
* @author: Admin
* @create: 2023/12/7 14:16
*/
@ConfigurationProperties(prefix = "pig") //prefix后面的名字是application.properties里配置里自己写的
@Component
public class Pig {
private Long id;
private String name;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = 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;
}
@Override
public String toString() {
return "Pig{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
运行主类结果:
(乱码解决方法:File->Settings->File encofings中的编码格式都改为utf-8)
public static void main(String[] args) {
//局部变量类型的自动推断
var ioc = SpringApplication.run(MainApplication.class, args);
//1、获取容器中所有组件的名字
String[] names = ioc.getBeanDefinitionNames();
//2、挨个遍历:
// dispatcherServlet、beanNameViewResolver、characterEncodingFilter、multipartResolver
// SpringBoot把以前配置的核心组件现在都给我们自动配置好了。
for (String name : names) {
System.out.println(name);
}
}
总结: 导入场景启动器、触发 spring-boot-autoconfigure这个包的自动配置生效、容器中就会具有相关场景的功能
思考:
1、SpringBoot怎么实现导一个starter、写一些简单配置,应用就能跑起来,我们无需关心整合
2、为什么Tomcat的端口号可以配置在application.properties中,并且Tomcat能启动成功?
3、导入场景后哪些自动配置能生效?

自动配置流程细节梳理:
1、导入starter-web:导入了web开发场景
2、主程序:@SpringBootApplication
3、xxxxAutoConfiguration自动配置类
4、写业务,全程无需关心各种整合(底层这些整合写好了,而且也生效了)
核心流程总结:
1、导入starter,就会导入autoconfigure包。
2、autoconfigure 包里面 有一个文件 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,里面指定的所有启动要加载的自动配置类
3、@EnableAutoConfiguration 会自动的把上面文件里面写的所有自动配置类都导入进来。xxxAutoConfiguration 是有条件注解进行按需加载
4、xxxAutoConfiguration给容器中导入一堆组件,组件都是从 xxxProperties中提取属性值
5、xxxProperties又是和配置文件进行了绑定
效果:导入starter、修改配置文件,就能修改底层行为。
框架的框架、底层基于Spring。能调整每一个场景的底层行为。100%项目一定会用到底层自定义
摄影:
普通开发:导入starter,Controller、Service、Mapper、偶尔修改配置文件
高级开发:自定义组件、自定义配置、自定义starter
核心:
最佳实战:
整合redis: