SpringBoot原理分析

1,依赖父工程起步
在这里插入图片描述
进入spring-boot-starter-parent中
在这里插入图片描述
可以看见并没有jar包的依赖,进入此工程的父工程
在这里插入图片描述
可以看见这个工程中有大量的依赖,所以可以得出结论:
起步依赖的作用就是进行依赖的传递。
2,web起步包
在这里插入图片描述
并不是所有的jar包都依赖,所以要创建web工程需要自己写依赖。进入spring-boot-starter-web中
在这里插入图片描述
可以看出spring-boot-starter-web已经提前依赖了关于web工程所需要的jar包了。
3,自动配置原理解析
在这里插入图片描述
通过applicationContext.getBeanDefinitionNames();方法返回所有容器中的对象。
进入MySpringBootApplication上的注解@SpringBootApplication中

@SpringBootApplication
public class application {
    public static void main(String[] args) {
        ApplicationContext applicationContext = SpringApplication.run(application.class, args);
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String name:beanDefinitionNames){
            System.out.println(name);
        }
    }
}

注解@SpringBootApplication的源码

@SpringBootApplication封装spring注解的复合注解,包含@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration

@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) })
public @interface SpringBootApplication {
	@AliasFor(annotation = EnableAutoConfiguration.class)
	Class<?>[] exclude() default {};
	@AliasFor(annotation = EnableAutoConfiguration.class)
	String[] excludeName() default {};
	@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
	String[] scanBasePackages() default {};
	@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
	Class<?>[] scanBasePackageClasses() default {};
}

3.1 @ComponentScan注解,等同于我们在ssm框架中配置在xml文件的

 <context:component-scan base-package="xxx.xxx.xxx"></context:component-scan>

componentScan 扫描当前包及其子包下被 @Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理,所以这个注解会自动注入所有在主程序所在包下的组件。默认把当前启动类所在的包作为扫描包的起点。

3.2 @SpringBootConfiguration : 表示当前类具有配置类的作用.
3.3 @EnableAutoConfiguration:自动配置:根据当前引入的依赖包,猜测需要创建的工程类型,以及工程中有可能创建的对象,根据猜测自动创建工程所需的相关实例bean

程序启动,会自动加载扫描所有 classpath:/META-INF/spring.factories文件 ,并且创建对应实例
在这里插入图片描述
在这里插入图片描述
spring.factories中有大量的很多以configuration结尾的类名称:例如加载DispatchServlet
在这里插入图片描述
结论:上面配置文件存在大量的以 Configuration 为结尾的类名称,这些类就是存有自动配置信息的类,而SpringApplication 在获取这些类名后再加载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值