springboot的配置文件,以及spring boot自动装配的原理,bean的管理。

发布时间:2023年12月20日

配置优先级:
?? ?spring boot中自此三种格式的配置文件:
?? ??? ?server.port:8081
?? ??? ?server.port:8082
?? ??? ?server.port:8083
?? ?spring boot还支持两种外部配置:
?? ??? ?java系统属性:
?? ??? ??? ?-Dserver.port=9000
?? ??? ?命令行参数:
?? ??? ??? ?--server.port=9002
?? ?在cmd窗口运行jar包:
?? ??? ?java -jar springboot-web-config-0.0.1-SNAPSHOT.jar
?? ??? ?java -Dserver.port=9001 -jar springboot-web-config-0.0.1-SNAPSHOT.jar
?? ??? ?java ?-jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
?? ??? ?java -Dserver.port=9001 -jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
?? ??? ?java -Dspring.datasource.password=123root ?-jar springboot-web-config-0.0.1-SNAPSHOT.jar
?? ??? ?java -Dspring.datasource.password=123root ?-jar springboot-web-config-0.0.1-SNAPSHOT.jar --server.port=9002
?? ?注意:
?? ??? ?Springboot项目进行打包时,需要引入插件 spring-boot-maven-plugin (基于官网骨架创建项目,会自动添加该插件)


Bean管理:
?? ?获取Bean:
?? ??? ?默认获取:
?? ??? ??? ?默认情况下,Spring项目启动时,会把bean都创建好放在IOC容器中。
?? ??? ??? ? ? ?@Autowired
? ? private ApplicationContext applicationContext;
?? ??? ?主动获取:
?? ??? ??? ?根据name获取:
?? ??? ??? ??? ?Object getBean(String name)
?? ??? ??? ?根据类型获取:
?? ??? ??? ??? ?<T> T getBean(Class<T> requiredType)

?? ??? ??? ?根据name和bean类型获取:
?? ??? ??? ??? ?<T> T getBean(String name, Class<T> requiredType)

?? ?Bean作用域:
?? ??? ?五种作用域:
?? ??? ??? ?singleton
?? ??? ??? ??? ?容器内同名称的bean,只能有一个实例(单例)默认
?? ??? ??? ?prototype
?? ??? ??? ??? ?每次使用该 bean 时会创建新的实例(非单例)
?? ??? ??? ?request
?? ??? ??? ??? ?每个请求范围内会创建新的实例(web环境中,了解即可)
?? ??? ??? ?session
?? ??? ??? ??? ?每个会话范围内会创建新的实例(web环境中,了解)

?? ??? ??? ?application
?? ??? ??? ??? ?每个应用范围内会创建新的实例(web环境中,了解)

?? ??? ?注意事项:
?? ??? ??? ?默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。

?? ??? ??? ?prototype的bean,每一次使用该bean的时候都会创建一个新的实例。
?? ??? ??? ?实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分Bean不需要配置scope属性。

?? ?第三方Bean:
?? ??? ?如果要管理的bean对象来自于第三方(不是自定义的),是无法用 @Component 及衍生注解声明bean的,就需要用到 @Bean注解。

?? ??? ?若要管理的第三方bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类。

?? ??? ?注意:
?? ??? ??? ?通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称就是方法名。

?? ??? ??? ?如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。


Spring boot原理:
?? ?起步依赖:
?? ?自动配置:
?? ??? ?前言:
?? ??? ??? ?SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。

?? ??? ?实现方案:
?? ??? ??? ?方案一:
?? ??? ??? ??? ?使用@ComponentScan组件扫描注解,手动扫描引入的第三方依赖中的bean
?? ??? ??? ?方案二:
?? ??? ??? ??? ?说明:@Import 导入。使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有以下几种:

?? ??? ??? ??? ?导入普通类:
?? ??? ??? ??? ??? ?@Import(TokenParser.class) ?//普通类 --> 交给ioc容器管理,成为ioc容器
?? ??? ??? ??? ?导入配置类:
?? ??? ??? ??? ??? ?@Import(HeaderConfig.class) ? //配置类 --> 配置类中的的所有bean都交给ioc容器管理,并成为ioc容器的bean
?? ??? ??? ??? ?导入 ImportSelector接口实现类:
?? ??? ??? ??? ??? ?@Import(MyImportSelector.class) //ImportSelector 接口实现类 ---> 批量导入
?? ??? ??? ??? ?@EnableXxxx注解,封装@Import注解?

?? ??? ??? ??? ??? ?@EnableHeaderConfig
?? ??? ?源码跟踪:
?? ??? ??? ?@SpringBootApplication注解:
?? ??? ??? ??? ?介绍:
?? ??? ??? ??? ??? ?该注解标识在SpringBoot工程引导类上,是SpringBoot中最最最重要的注解。该注解由三个部分组成:

?? ??? ??? ??? ?组成:
?? ??? ??? ??? ??? ?1.@SpringBootConfiguration:该注解与 @Configuration 注解作用相同,用来声明当前也是一个配置类。

?? ??? ??? ??? ??? ?2.@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。

?? ??? ??? ??? ??? ?3.@EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解。
?? ??? ??? ??? ?自动装配原理:@Conditional
?? ??? ??? ??? ??? ? ? ?@Bean
? ?// @ConditionalOnClass(name = "io.jsonwebtoken.Jwts") //判断环境中是否存在对应的字节码文件,如果存在才祖册bean
? ? public HeaderParser headerParser(){
? ? ? ? return new HeaderParser();

? ? }
?? ??? ??? ??? ??? ? ?// @ConditionalOnMissingBean //判断环境中是否存在该bean,如果不存在,在注册
? ? public HeaderParser headerParser(){
? ? ? ? return new HeaderParser();

? ? }
?? ??? ??? ??? ??? ? ? ?@ConditionalOnProperty(name = "sde",havingValue = "666")
? ? public HeaderParser headerParser(){
? ? ? ? return new HeaderParser();

? ? }
?

文章来源:https://blog.csdn.net/weixin_64502989/article/details/135095719
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。