- Published on
Spring-解析配置类
ConfigurationClassPostProcessor核心难点类
重要说明
- AnnotationConfigApplicationContext 加载了配置类M,如果M里面有N 注解了@Bean,在N里面在使 用 @Configuration 注解引入其他类P,是不能生效的。
- 由于spring如何解析配置类都是源码分析,主要需要你自己去调试;而且基本就是几个递归,故而没有什么原理性的东西。
关键点:spring当中一切皆配置类;但是如果实现了特殊接口的就不会是配置类(需要自己去实践)
Spring源码解析流程图
Spring Boot零配置和内嵌Tomcat
如何内嵌一个Web容器
以Tomcat为例,参考SpringBoot的原理可以来内嵌一个Tomcat:
1. 添加依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.71</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
2. 编写启动代码
public class SpringApplication {
public static void run() {
// 实例化tomcat
Tomcat tomcat = new Tomcat();
tomcat.setPort(9090);
Context context = tomcat.addWebapp("/", "");
Wrapper d = tomcat.addServlet(context, "d", new ShadowServlet());
d.addMapping("你自己的代码");
d.setLoadOnStartup(1);
try {
tomcat.start();
} catch (LifecycleException e) {
e.printStackTrace();
}
// 阻塞
tomcat.getServer().await();
}
}
3. 测试调用
public class Test {
public static void main(String[] args) {
SpringApplication.run();
}
}