美文网首页
Spring AOP & IOC 源码解析

Spring AOP & IOC 源码解析

作者: 可可西里的星星 | 来源:发表于2019-06-04 17:05 被阅读0次

    AOP
    aop 分为基于接口的动态代理jdk和基于类的cglib

    简单IOC流程:
    1、Spring Boot
    (1)SpringApplication public ConfigurableApplicationContext run(String... args) 方法的refreshContext(context);到了AbstractApplicationContext的refresh() 方法(spring mvc和boot通用)
    1)通过DefaultListableBeanfactory初始化BeanDefinition,放在private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256)

    2)判断是否是lazy-init:
    finishBeanFactoryInitialization(beanFactory)里头有个初始化non-lazy-init bean的函数 preInstantiateSingletons()

    3)在getBean()的时候实例化bean,在AbstractAutoProxyCreator的postProcessAfterInitialization wrapIfNecessary 判断当前方法是否符合pointcutexception,如果符合就是被代理类,根据是接口还是类,分别初始化为JDKAopProxy或者CglibProxy
    2、Spring MVC 直接走AbstractApplicationContext的refresh() 方法其后同Spring boot
    3、调用目标方法,实际是走的代理类的invoke或者intercept方法,这两个方法都去获取了interceptchain,就是该方法的所有advice,然后走到invocation.proceed,先去判断有没有前置advice,有就调用前置advice的方法,然后调用被代理方法,最后调用所有的后置advice的方法。

    相关文章

      网友评论

          本文标题:Spring AOP & IOC 源码解析

          本文链接:https://www.haomeiwen.com/subject/yorrxctx.html