加载Bean流程
这里画了Bean加载简版流程图。主要是为了搞清楚几个扩展加载顺序。
常用扩展点
1.Aware
Aware
接口都是用来感知的。
BeanNameAware
用来感知Bean对象被容器管理的beanName
BeanClassLoaderAware
可以给Bean对象设置类加载器
BeanFactoryAware
给Bean对象设置BeanFacory对象
Spring 在初始化Bean对象时,对Aware接口的处理
private void invokeAwareMethods(String beanName, Object bean) {
if (bean instanceof Aware) {
if (bean instanceof BeanNameAware) {
((BeanNameAware) bean).setBeanName(beanName);
}
if (bean instanceof BeanClassLoaderAware) {
ClassLoader bcl = getBeanClassLoader();
if (bcl != null) {
((BeanClassLoaderAware) bean).setBeanClassLoader(bcl);
}