SpringBoot启动分析
初始化initialize方法执行完之后,会调用run方法,开始启动SpringBoot。首先遍历执行所有通过SpringFactoriesLoader,在当前classpath下的META-INF/spring.factories中查找所有可用的SpringApplicationRunListeners并实例化。
springboot启动流程如下:启动流程主要分为三个部分,第一部分进行、SpringApplication的初始化模块,配置一些基本的环境变量、资源、构造器、监听器,第二部分实现了应用具体的启动方案,包括启动流程的监听模块、加载配置环境模块。
首先贴一张很不错的图,SpringBoot启动结构图,图片出自SpringBoot启动流程解析。本文的分析基于Spring Boot 5,非Spring的代码只有下面这个启。提供大量优秀的Web框架方便开发等等。
springbootrun方法什么时候扫描的配置类
每个SpringBoot程序都有一个主入口,也就是main方法,main里面调用SpringApplication.run()启动整个spring-boot程序,该方法所在类需要使用@SpringBootApplication注解。
推断应用的类型是普通的项目还是web项目。查找并加载所有可用初始化器,设置到initializers属性中。找出所有的应用程序监听器,设置到listeners属性中。推断并设置main方法的定义类,找到运行的主类。
在主配置类上打上@SpringBootApplication注解就能实现自动配置,这个注解里面主要包含了三个注解,分别是@SpringBootConfiguration标明这个类是一个配置类、@EnableAutoConfiguration实现自动配置、@ComponentScan扫描组件。
SpringBoot项目主启动类上常用的注解释意
1、springboot常用注解有@SpringBootApplication;@Repository;@Service;@RestController;@ResponseBody。
2、:##@SpringBootApplication 标识该类为SpringBoot项目启动类。
3、在springboot中大量使用了该注解,该注解提供了一种使用Java类方式配置bean。 可以发现 @Configuration使用了@Component 注解修饰。 实例: 配置Mybatis会话工厂 @Import 功能和 类似,修饰Java类,用于向当前类导入其他配置类。
4、@SpingBootApplication:SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。
5、springboot三大核心注解特点 Configuration就要提到他的搭档@Bean,使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件,这个注解类标识这个类可以使用SpringIoC容器作为bean定义的来源。
SpringBoot的@SpringBootApplication说明以及在启动类以外的包写@Cont...
##@SpringBootConfiguration:读取配置文件,配置文件的路径是当前根目录(src/main/resources/application.yml等)。
这里我们先回到启动类的 run 方法从头分析初始化流程。
开启 Spring 应用上下文的自动配置功能,它试图猜测你可能需要配置的 bean 信息。表示包含该注解的类所在的包应该在 AutoConfigurationPackages 中注册。
springbootbean注入不可见
1、ComponentScan注解。扫描或解析的bean只能是Spring内部所定义的,比如@Component、@Service、@Controller或@Repository。如果有一些自定义的注解,比如@Consumer、这个注解修饰的类是不会被扫描到的。
2、具体原因如下:无法点击按钮进行跳转,点击按钮没用,点击按钮不跳转,甚至错误页面也没法见到通常是:控制后台逻辑没有给出Delete相关的功能。
3、由于web应用启动的顺序顺序的原因(listener-filter-servlet),在Filter中注入Bean是不会成功的。
4、如果导入了下面两个包 切记再配置文件中路径一定要写成mybatis-plus.mapper-locations=classpath:mapper/*.xml这样的 如果不加-plus莫名其妙的就会报错找不到,但是在配置文件中没有错误提示。
5、删除一些类的时候,注意将这些类连带的@Autowired注解一起删掉,不然可能没有报错,但导致无法注入Bean,出现这种不明所以的bug,就可以解决。
6、说明你的spring boot启动时的application类不在io.github.gefangshuai.app及其子包下。SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描的。“Application类”是指SpringBoot项目入口类。