Spring 核心 IOC/AOP (控制反转/依赖注入 与 切面编程)

本文解析了Spring框架的核心原理,包括IOC容器如何实现依赖注入,解决类间重度耦合问题;以及AOP机制如何通过动态代理技术减少重复代码,提高代码复用率。

基于最原始的tomcat + servlet 的编码原理

对spring IOC机制的理解

  • 控制反转/依赖注入
  • 解决的痛点 :
    • 之前都是需要new对象,类与类之间重度耦合,代码修改变动较大.
  • Bean加载流程
    • Tomcat启动的时候直接会启动spring容器
    • 扫描所有的代码,根据代码的注解Bean,或者是xml配置
    • 扫描到的bean都由spring容器创建管理.
    • 并且创建并建立对象中的引用, 自动注入.
  • @Autowired 与@Resource
    • @Autowired 按byType自动注入
    • @Resource默认按 byName自动注入
  • 引入spring mvc等一些框架,内包含一些核心组件.
  • 底层的核心技术是什么?
    • 反射技术,通过类加载器加载class , 通过反射创建bean实例.
  • 优势是什么:
    • 让spring 系统的 类与类之间彻底的解耦合.

对spring AOP机制的理解

  • 切面编程
  • 解决的痛点:
    • 多个场景,都同时有类似的需求 , 大量的重复的代码在不同的类中出现.
  • @Around @Before @After
    • @ Order (i) 按照 i 的大小决定切面的顺序. i 小先进.
    • 在切入点前的操作,按order的值由小到大执行
    • 在切入点后的操作,按order的值由大到小执行
  • AOP的核心技术就是动态代理.
    • 生成一个动态代理对象,将切面内的bean注入到这个动态代理对象内 .
    • 在IOC自动注入的时候 , 其实是注入的动态代理这个对象.