Spring的自动装配如何实现呢?
1、使用Spring Initializr方式构建Spring Boot项目
2、SpringBoot的启动源码剖析
为什么通过SpringApplication.run();这个方法就能启动项目呢,
其实可以根据代码一步步进行查看,其结论是: 先创建Spring容器,再启动Tomcat
和SpringMVC 是相反的。(相对SpringMVC更容易,因为它需要依赖Tomcat依赖的机制接口等)
而Spirigboot 就
回到刚刚的图片,工厂如何晓得是拿那一个呢
那如何判断什么时候用Tomcat什么时候用Jetty
看这个类
什么时候用Tomcat,什么时候用Jetty就是根据这个来判断的。
首先发现有@Bean就会去创建,但是又发现有@ConditionalOnClass,就判断是否符合条件,如果符合就创建,不符合就不创建,Tomcat再启动的时候,如果需要Bean对象,就通过Factory接口来判断,要调用的是哪一个。
疑问,为什么没有对应的jar包也不报错
有一个问题,为什么没有引入jetty的jar包的时候,它没有报错呢?而且上面还显示它们还报红哦,说明是没有的哦,这是因为spring-boot已经编译好了,(形成了class文件),直接运行都没问题的,因为已经编译好了,运行的时候就会取这个注解,和注解里面的值,都不设计这个红色的class,因为通过Server.class等这行都不涉及对应类的加载,所以得出的结论是: @ConditionalOnClass运行的时候不需要加载对应的类,
只有当需要加载对应的类发现没有才会报错,但是现在是不需要加载对应的类,所以红色也不会报错。
其实里面的逻辑是会尝试加载这个类,但是没有加载到就返回为空,就不会生成对应的Bean
(涉及到JVM的内容)
Tomcat和Jetty默认端口在哪里
默认端口都是8080,写在共同 的父类接口中,
进入父类的父类
自定义的端口什么时候给到它的呢
通过这里来看,是否直接获取配置的值
那么如何修改这个bean的属性呢?是什么机制呢?
其实改对象的属性,是利用bean的后置处理器机制去改的。