Spring相关八股

@Autowired 和 @Resource的区别 

如何配置Bean的作用域 

用@Scope注解 @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)

Bean的生命周期

         1.实例化

                (1)通过反射去推断构造函数进行实例化

                (2)实例工厂、静态工厂

        2.属性赋值

                (1)解析自动装配(@Autowired)

                (2)可能出现循环依赖问题 a和b 互相@Autowired

        3.初始化

                (1)调用XXXAware回调方法

                (2)调用初始化生命周期回调a 

                (3)如果bean实现aop,创建动态代理

        4.销毁

                (1)在spring容器关闭的时候进行调用

                (2)调用初始生命周期回调a

SpringBoot自动配置原理

启动类@SpringBootApplication中包含@EnableAutoConfiguration注解,该注解会扫描 META-INF/spring-factories 文件,这个文件包含一系列的自动配置类名,这些自动配置类会依据类路径中的依赖和配置,自动配置相应的 Bean。

自动配置类是带有 @Configuration 注解的类,它们会依据特定的条件来决定是否进行配置。常见的条件注解有:

  • @ConditionalOnClass:当类路径中存在指定的类时,才会进行配置。
  • @ConditionalOnMissingBean:当 Spring 容器中不存在指定类型的 Bean 时,才会进行配置。
  • @ConditionalOnProperty:当配置文件中存在指定的属性,并且属性值满足条件时,才会进行配置。

工作流程

  1. 启动 Spring Boot 应用:当启动 Spring Boot 应用时,@SpringBootApplication 注解中的 @EnableAutoConfiguration 会被处理。
  2. 加载 spring.factories 文件:Spring Boot 会从类路径下的所有 META - INF/spring.factories 文件中加载 org.springframework.boot.autoconfigure.EnableAutoConfiguration 对应的自动配置类列表。
  3. 筛选自动配置类:根据各种条件注解对自动配置类进行筛选,只有满足条件的自动配置类才会被应用。例如,如果类路径中没有包含 tomcat 相关的类,那么与 Tomcat 服务器配置相关的自动配置类就不会被应用。
  4. 配置 Bean:对于通过筛选的自动配置类,Spring Boot 会将其中定义的 Bean 注册到 Spring 容器中。

示例分析

以 spring - boot - starter - web 为例,当在项目中添加该依赖时:

  • spring - boot - starter - web 依赖包含 META - INF/spring.factories 文件,其中列出了多个与 Web 应用相关的自动配置类,如 WebMvcAutoConfiguration。
  • WebMvcAutoConfiguration 类带有多个条件注解,例如 @ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class}),表示只有当类路径中存在 Servlet、DispatcherServlet 和 WebMvcConfigurer 类时,该自动配置类才会生效。
  • 当满足条件时,WebMvcAutoConfiguration 会自动配置 Spring MVC 的相关组件,如 DispatcherServlet、RequestMappingHandlerMapping 等,并将它们注册到 Spring 容器中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值