摘要:
SpringMVC大致脉络图: RequestProcessorChain: 参照的是之前学习Spring的时候经常遇到的责任链模式的后置处理器。该类中保存了RequestProcessor的多个实现类,之所以会有多个不同的实现类是因为DispatcherServlet是项目中所有请求的唯一入口,这 阅读全文
摘要:
AdvisorAdapter关系图: MethodBeforeAdviceAdapter:该类提供getInterceptor()方法,将传递过来的advisor给调用getAdvice()方法获取到对应的advice然后强转为MethodBeforeAdvice类型。最后将其包装成MethodBe 阅读全文
摘要:
前言: 由于动态代理对象的创建并不需要也不会去干预bean的实例化、属性赋值、初始化。而初始化结束才意味着bean被创建完成,因此Spring会等到bean初始化之后,也就是执行完.invokeInitMethods()方法。才会将相关的横切逻辑织入到bean里。Spring的横切逻辑主要放在了初始 阅读全文
摘要:
横切逻辑的加载与解析: 即Aspect和Advice的加载阶段,在后续创建动态代理的时候, 根据之前开发自研框架AOP的经验,需要拿着所有的Aspect去尝试与容器的业务Bean去做匹配,只有匹配的Aspect才会去创建对应的动态代理,SpringAOP也不例外。 而进行匹配前势必要把IOC容器所有 阅读全文
摘要:
AutoProxyCreator的关系图: 观察类图,我们可以看到AbstractAutoProxyCreate实现了Aware接口,BeanFactoryAware接口使之拥有容器的能力,BeanClassLoaderAware接口使之用于Bean类加载器的能力。 实现AopInfrastruct 阅读全文
摘要:
前言: 为什么在启动类加上@EnbleAspectJAutoProxy就能支持AOP @EnableAspectJAutoProxy 首先我们跟入到源码中,进入到@EnbleAspectJAutoProxy类中,我们可以发现它有两个成员属性 proxyTargetClass: 表明该类采用CGLIB 阅读全文
摘要:
BeanPostProcessor: BeanPostProcessor:Bean后置处理器 BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口。接口声明如下: public interface BeanPostProcessor { //bean初始化方法调用前被 阅读全文
摘要:
前言 容器是OOP的高级工具: 以低耦合低侵入的方式打通从上到下的开发通道 按部就班填充代码逻辑实现业务功能,每层逻辑都可无缝替换 OOP将业务程序分解成各个层次的对象,通过对象联动完成业务 无法很好地处理分散在各业务里的通用系统需求 系统需求 码农才去关系的需求 添加日志信息:为每个方法添加统计时 阅读全文
摘要:
该方法在AbstractAutowireCapableBeanFactory类中的doCreateBean方法中有使用到 populateBean方法大致流程图: (1)对Bean进行判空逻辑 (2)在设置属性前去修改Bean状态,也可以控制是否继续给Bean设置属性值(如果Bean不是Spring 阅读全文
摘要:
Spring中的单例循环依赖解决 我们声明了两个类(A、B),两个类中的成员变量相互引用:然后在Spring中就会产生循环依赖(A依赖B,B依赖A)。 1 @Component 2 public class GirlFriend { 3 @Autowired 4 private BoyFriend 阅读全文