用一段代码和结果来证明上面的理论
Appconfig.java
@ComponentScan(“com.enjoy.beanDefinition”)
@Configuration
public class Appconfig {
}
X.java
@Component
public class X {
public X(){
System.out.println(“X Constructor”);
}
}
Y.java
public class Y {
}
Test.java
public class Test{
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
ac.register(Appconfig.class);
ac.refresh();
}
}
④当spring把类所对应的beanDefintion对象存到map之后,spring会调用程序员提供的bean工厂后置处理器。什么叫bean工厂后置处理器?在spring的代码级别是用一个接口来表示BeanFactoryPostProcessor,只要实现这个接口便是一个bean工厂后置处理器了,BeanFactoryPostProcessor的详细源码解析后面文章再来分析,这里先说一下他的基本作用。BeanFactoryPostProcessor接口在spring内部也有实现,比如第①步当中完成扫描功能的类ConfigurationClassPostProcessor
便是一个spring自己实现的bean工厂后置处理器,这个类笔者认为是阅读spring源码当中最重要
的类,没有之一;他完成的功能太多了,以后我们一一分析,先看一下这个类的类结构图。
ConfigurationClassPostProcessor
实现了很多接口,和本文有关的只需关注两个接口BeanDefinitionRegistr