spring
2023-02-17 22:00:11 1 举报
AI智能生成
spring流程图
作者其他创作
大纲/内容
public GenericApplicationContext() {
this.beanFactory = new DefaultListableBeanFactory();
}
调用父类的构造函数生成一个BeanFactory
this.beanFactory = new DefaultListableBeanFactory();
}
调用父类的构造函数生成一个BeanFactory
refresh()
prepareBeanFactory(beanFactory);
添加三个BeanPossProceesor
添加三个BeanPossProceesor
invokeBeanFactoryPostProcessors(beanFactory);
执行后置处理->进行扫描
执行后置处理->进行扫描
doScan()
将bean扫描出来为BeanDefinition
进行过滤。是否为exclude里面,是否为非抽象或者抽象并且有LookUp注解的
进行过滤。是否为exclude里面,是否为非抽象或者抽象并且有LookUp注解的
设置BeanDefinition属性,是否懒加载,是否单例
检查BeanName是否存在,不存在进行注册
finishBeanFactoryInitialization(beanFactory);
实例化所有单例Bean
实例化所有单例Bean
// 获取合并后的BeanDefinition
RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);
RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);
1.如果不是抽象,不是懒加载,并且是单例的
2.判断是否FactoryBean
3.如果是FactoryBean,判断是否有IsEagerInit,有的话将真正的对象创建出来
2.判断是否FactoryBean
3.如果是FactoryBean,判断是否有IsEagerInit,有的话将真正的对象创建出来
getBean()
1.从单例池进行获取,有就返回,没有就继续
2.将Bean标识为创建中
3.获取合并的BeanDefinition
4.判断是否抽象
5.判断是否有依赖@DependsOn注解,有就先加载里面的内容,
如果互相DependsOn就报错
6.进行创建createBean()
2.将Bean标识为创建中
3.获取合并的BeanDefinition
4.判断是否抽象
5.判断是否有依赖@DependsOn注解,有就先加载里面的内容,
如果互相DependsOn就报错
6.进行创建createBean()
1.实例化前,如果有实例化对象就直接进行初始化后,跳过中间
2.创建Bean实例
推断构造方法
1.有空参用空参
2.无空参有带参数的
3.有多个参数的就报错
1.有空参用空参
2.无空参有带参数的
3.有多个参数的就报错
3.后置处理合并的BeanDefinition
实现MergedBeanDefinitionPostProcessor的
实现MergedBeanDefinitionPostProcessor的
4.将Bean放入三级缓存中
5.实例化后
6.属性注入,如果设置了BeanDefinition属性将覆盖属性注入
寻找注入点
遍历targetClass中的所有Field
1.如果是static的不注入
2.如果是String的不注入
遍历targetClass中的所有Field
1.如果是static的不注入
2.如果是String的不注入
7.初始化前
8.初始化
9.初始化后,进行AOP
wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
配置类上加@EnableAspectJAutoProxy注解
注解引入@Import(AspectJAutoProxyRegistrar.class)
会注册AnnotationAwareAspectJAutoProxyCreator.class
wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
配置类上加@EnableAspectJAutoProxy注解
注解引入@Import(AspectJAutoProxyRegistrar.class)
会注册AnnotationAwareAspectJAutoProxyCreator.class
1.判断是否为AOP的基础类,是就不用进行AOP
2.创建动态代理
createAopProxy()
createAopProxy()
1.如果代理类是接口或者已经经过JDK代理生成的代理类,只能JDK代理
2.其他Cglib
2.其他Cglib
3.生成代理对象
getProxy(classLoader)
getProxy(classLoader)
// 代理对象在执行某个方法时,根据方法(先匹配类,在匹配方法)筛选出匹配的Advisor,并适配成Interceptor
List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);
List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);
//递归调用Process 执行业务逻辑
0 条评论
下一页