-
父项目做依赖管理
依赖管理
他的父项目:spring-boot-starter-parent org.springframework.boot 2.5.5 几乎声明了所有开发中常用的依赖的版本号org.springframework.boot spring-boot-dependencies 2.5.5 -
开发导入starter场景启动器
spring-boot-starter-web 1、spring-boot-starter :springBoot场景启动器;帮我们导入了web模块正常运行所依赖的组件; 2、SpringBoot将所有的功能场景都抽取出来,做成一个个的starters(启动器) ,只需要在项目里面引入这些starters相关场景的所有依赖都会导入进来。要用什么就导入什么场景的启动器。 3、所有的场景启动器模块最底层的依赖:org.springframework.boot spring-boot-starter 2.5.5 compile 4、SpringBoot所有支持的场景:
https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters
-
无需关注版本号,自动版本仲裁
- 引入的非本仲裁的jar,要写版本号
-
可以修改版本号
1、查看spring-boot-dependencies里面规定当前依赖的版本用的key
2、在当前项目里面重写配置
5.1.43
1.2、自动配置
-
自动配置好Tomcat
- 引入Tomcat依赖
- 配置Tomcat
-
自动配置好SpringMVC
- 引入SpringMVC的全套组件
- 自动配置好SpringMVC常用组件
-
自动配置好Web常见的功能,如:字符编码问题
- SpringBoot帮我们配置好了所有web开发的场景场景
-
默认的包结构
-
主程序所在的包及其所有子包里面的组件都会被默认扫描进来
-
无需以前的包扫描配置
-
想要改变扫描路径:@SpringBootApplication(scanbasePackages = “com”)
-
或者 @ComponentScan指定扫描路径
一个@SpringBootApplication 等同于 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com")
-
-
各种配置拥有默认值
-
按需要加载所有自动配置项
- 虽然场景的所有自动配置启动的时候默认会全部
- 按照条件装配规则,最终会按需配置
//继承父类依赖
spring-boot-starter-parent
org.springframework.boot
2.5.5
//导入web模块依赖
org.springframework.boot
spring-boot-starter-web
3、创建主程序:启动Spring boot应用
@SpringBootApplication //标注这是一个主程序,说明这是一个springboot应用
public class HelloWorldApplication {
public static void main(String[] args) {
//Spring应用启动起来
SpringApplication.run(HelloWorldApplication.class,args);
}
}
4、编写相关的Controller、Service@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "helloWorld";
}
}
5、运行主程序测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jeIX72tU-1635054821089)(C:UsersXiaoQiangAppDataRoamingTyporatypora-user-images1634627459631.png)]
6、简化部署
org.springframework.boot
spring-boot-maven-plugin
将这个应用打包成jar包,直接使用java -jar的命令进行执行;
Hello World探究### 1.POM文件 #### 1、父项目
我们引入的父项目他的父项目是: spring-boot-starter-parent org.springframework.boot 2.5.5 他是真正管理Spring Boot应用里面的所有依赖版本号: org.springframework.boot spring-boot-dependencies 2.5.5
Spring Boot的版本仲裁中心:
以后我们导入依赖默认是不需要写版本号的:
注意:(没有在dependencies里面管理的依赖还是需要声明版本号的)
2、导入的依赖spring-boot-starter-web它的里面还是引用了: org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter 2.5.5 compile
spring-boot-starter-web
spring-boot-starter :springBoot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
SpringBoot将所有的功能场景都抽取出来,做成一个个的starters(启动器) ,只需要在项目里面引入这些starters相关场景的所有依赖都会导入进来。要用什么就导入什么场景的启动器。
3、底层注解 1、如何给容器里面添加组件 1.1@Configuration 告诉SpringBoot这是一个 配置类 == 配置文件
但是配置类本身也是组件
注意:但是在配置类,我们不能写标签了,要写方法
@Configuration 将类标记为适合 Spring 驱动的配置类似于我们的bean文件
public class MyClass {
//@Bean给容器中添加组件,以方法名作为主键的id,返回类型就是组件类型,返回的值,就是组件在容器中的实例
@Bean
public Pet pet(){
return new Pet();
}
@Bean("tow") //指定id名
public Pet pet01(){
return new Pet("张三",50);
}
}
-
@Bean相当于是我们以前的Spring配置文件一样注册使用
操作容器组件
//接收所有组件的容器 ConfigurableApplicationContext run1 = SpringApplication.run(HelloWorldApplication.class, args); //通过这个容器获取bean组件,和spring的xml文件操作一样 run1.getBean("pet01"); -
配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
Pet pet1 = (Pet) run.getBean("pet01"); Pet pet2 = (Pet) run.getBean("pet01"); System.out.println(pet1 == pet2); System.out.println(pet1.hashCode()); System.out.println(pet2.hashCode()); 结果: true 1301987508 1301987508不生成代理对象
@Configuration(proxyBeanMethods = false)
给容器中自动创建出这个类型的组件,默认组件的名称就是全类名
@import(User.class) 1标记
//获取所有Pet类型的bean
String[] beanNamesForType = run.getBeanNamesForType(Pet.class);
for (String s : beanNamesForType) {
System.out.println(s);
}
User bean = run.getBean(User.class); 1标记
System.out.println(bean);
结果:pet01
namePet02
com.yang.controller.User@517566b
2、注解-条件装配
1、@Conditional
条件装配:满足Conditional指定的条件,则进行组件注入
3、注解-原生配置文件引入 @importResource @importResource("classpath:beans.xml")
4、配置绑定
1、@ConfigurationProperties
方式一:@Component + @ConfigurationProperties
@Component //只有在容器中的组件,才会拥有SpringBoot提供的强大功能
@ConfigurationProperties(prefix = "mycar")
public class Car {
}
方式二:@Component + @EnableConfigurationProperties
// 1.开启Car 配置绑定功能 // 2.把这个Car这个组件自动注入到容器中 @EnableConfigurationProperties(Car.class)2、主程序类,主入口类
@SpringBootApplication //标注这是一个主程序,说明这是一个springboot应用
public class HelloWorldApplication {
public static void main(String[] args) {
//Spring应用启动起来
SpringApplication.run(HelloWorldApplication.class,args);
}
}
@SpringBootApplication : springboot应用,标注在某个类上,说明这个类就是Springboot主配置类,
那springboot就应该运行这个类的main方法来启动Springboot应用;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
@SpringBootConfiguration:Springboot的配置类
标注在某个类上,表示这是一个SpringBoot的配置类
@Configuration: 配置类上来标注这个注解;
配置类 — 配置文件 ;配置类也是容器中的一个组件;@Component
@EnableAutoConfiguration: 开启自动配置功能
以前我们需要配置的东西,SpringBoot帮我们自动装配;@EnableAutoConfiguration告诉Springboot开启自动装配功能,这样自动配置才能生效;
@AutoConfigurationPackage
@import({AutoConfigurationimportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自动配置包
@import({Registrar.class})
Spring的底层注解@import,给容器中导入一个组件;导入的组件由Registrar.class来导入
@import({AutoConfigurationimportSelector.class}):给容器中导入组件
AutoConfigurationimportSelector
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
自动配置原理//标注这是一个主程序,说明这是一个springboot应用
@SpringBootApplication@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}
1、@SpringBootConfiguration
@Configuration。代表当前是个配置类
2、@ComponentScan指定来定义要扫描的特定包,如果没有定义特定的包,将从声明该注解的类的包开始扫描。
3、@EnableAutoConfiguration@AutoConfigurationPackage
@import(AutoConfigurationimportSelector.class)
public @interface EnableAutoConfiguration {}
1、@AutoConfigurationPackage
自动配置包?,指定了默认的包规则
@import(AutoConfigurationPackages.Registrar.class) //给容器中导入一个组件
public @interface AutoConfigurationPackage {}
//利用Registrar给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来。HelloWorldApplication所在的包下。
2、@import(AutoConfigurationimportSelector.class)
最终就是到这个文件,给容器中加载所有的配置类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0XErD1cf-1635054821090)(C:UsersXiaoQiangAppDataRoamingTyporatypora-user-images1635048457660.png)]
ava
@AutoConfigurationPackage
@import(AutoConfigurationimportSelector.class)
public @interface EnableAutoConfiguration {}
**1、@AutoConfigurationPackage**
自动配置包?,指定了默认的包规则
```java
@import(AutoConfigurationPackages.Registrar.class) //给容器中导入一个组件
public @interface AutoConfigurationPackage {}
//利用Registrar给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来。HelloWorldApplication所在的包下。
2、@import(AutoConfigurationimportSelector.class)
最终就是到这个文件,给容器中加载所有的配置类
[外链图片转存中…(img-0XErD1cf-1635054821090)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-isvMDoco-1635054821091)(C:UsersXiaoQiangAppDataRoamingTyporatypora-user-images1635048467594.png)]



