尚硅谷的教程有点不适合初学SpringBoot我,等后面SpringBoot用熟了再来看,留个未完成笔记
JDK 8 ,maven3.3+
springboot是简化spring快速开发的脚手架
<!-- springboot的依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<!-- springboot的web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
/**
* 主程序类
* @SpringBootApplication:这是一个springboot应用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
//@Controller
//@ResponseBody
@RestController
public class HelloController {
@RequestMapping("/hello")
public String helloTest01(){
return "hello springboot";
}
}
直接运行main函数即可
统一配置–>application.properties,springboot官网的Application Properties中有介绍
#修改服务器端口
server.port=8888
<!-- 打jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
打成的jar包可以直接使用
java -jar springboot2-1.0-SNAPSHOT.jar
<!--springboot的依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<!--他使后面的依赖都不用写版本号,因为在他的父项目上几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制,以下是父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
修改仲裁版本号
<!--1、查看spring-boot-dependencies里面规定当前的版本用的 key-->
<!--2、在当前项目中进行重写-->
<properties>
<mysql.version>8.0.33</mysql.version>
</properties>
开发导入starter场景启动器
1、见到很多 spring-boot-starter-* : *就某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。
5、所有场景启动器最底层的依赖:spring-boot-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
1、引入依赖默认都可以不写版本,自动仲裁版本号
2、引入非版本仲裁的jar,要写版本号。
1、自动配置了tomcat
在 spring-boot-starter-web 中引入了依赖
配置tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
2、自配置好了springmvc
3、自动配置好web开发的常用功能:如字符编码问题,文件上传解析器
4、默认包结构
主程序所在的包以及下面的所有子包里面的组件都会默认扫描出来
想要改变扫描路径,@SpringBootApplication(scanBasePackages=“xyz.zzj”) 或者@ComponentScan 指定扫描路径
- @SpringBootApplication
- 等同于
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan("com.atguigu.boot")
5、各种配置拥有默认值
默认配置最终都是映射到某个类上,如:MultipartProperties
配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
6、按需加载配置
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类
public class MyConfig {
/**
* 外部无论对配置类中的这个组件注册方法调用多少次都是之前注册容器中的单实例对象
* @return
*/
@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01(){
return new User("zzj",18);
}
@Bean
public Pet pet01(){
return new Pet("zzj");
}
}
–用@bean配置的组件也是 单例 的
–配置类本身也是组件
–proxyBeanMethods:代理bean方法
? Full(proxyBeanMethods = true):保证每个@Bean方法被调用多少次返回的组件都是单实例的
? Lite(proxyBeanMethods = false):每个@Bean方法被调用多少次返回的组件都是新创建的
? 组件依赖必须使用Full模式默认。其他默认是否Lite模式
所以配置中:类组件之间没有依赖关系就用lite,启动快,不用检查,也就是为proxyBeanMethods = false
? 类组件之间有依赖关系时必须使用full,方法调用时会得到之前的单实例组件proxyBeanMethods = true
import导入的组件名字是:全类名
@Import({User.class, DBHelper.class})
条件装配:满足Conditional指定的条件,则进行组件注入
@ConditionalOnBean
当user组件依赖于tom组件,但是tom组件并没有被注册,就是一个普通的类时,则user组件也不会被注册
@ConditionalOnBean(name="tom")
@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01(){
return new User("zzj",18);
}
//@Bean("tom")
public Pet pet01(){
return new Pet("zzj");
}
@ImportResource("classpath:beans.xml") //导入xml文件配置文件
@Bean
public User user01(){
return new User("zzj",18);
}
如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用;
public class getProperties {
public static void main(String[] args) throws FileNotFoundException, IOException {
Properties pps = new Properties();
pps.load(new FileInputStream("a.properties"));
Enumeration enum1 = pps.propertyNames();//得到配置文件的名字
while(enum1.hasMoreElements()) {
String strKey = (String) enum1.nextElement();
String strValue = pps.getProperty(strKey);
System.out.println(strKey + "=" + strValue);
//封装到JavaBean。
}
}
}
在SpringBoot里面可以使用@ConfigurationProperties注解来绑定properties文件里的值
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {
private String name;
private String bland;
public Car() {
}
mycar.name=byd
mycar.bland=1001
自动装配个Car 组件时,能直接读取properties文件里的值
@Autowired
Car car;
@RequestMapping("/car")
public Car Car(){
return car;
}
使用这两个注解时就不用写@Component
可以直接在配置类里面配置
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类
@EnableConfigurationProperties(Car.class)
//开启Car的配置绑定
//把Car这个组件自动配置到容器里
public class MyConfig {