IOC、AOP、Bean的生命周期

IOC

简单说

  • 准备Spring的上下文环境ApplicationContext
  • 扫描XML文件和注解, 得到一系列Bean的定义
  • 根据Bean进行实例化, 依赖注入
  • 把Bean放到容器Map里面

详细说

  • 准备Spring的上下文环境
    • 比如XMLWebApplicationContext、AnnotationConfigApplicationContext, 准备去扫描XML文件和注解
    • 这些就是ApplicationContext底层主要接口是BeanFactory, 这个工程是生成Bean的核心接口
  • 扫描XML文件和注解
    • 得到一个个BeanDefinition对象, 得到得是Bean的定义, 比如得到Bean的类、依赖关系、属性
  • 根据Bean进行实例化, 依赖注入
    • Spring的ApplicationContext先生成一个DefaultListableBeanFactory的Bean工厂, Bean工厂基于BeanDefination创建Bean, 只生成单例模式的Bean, 不会生成原型Bean
    • 生成Bean的过程主要分: 实例化一个Bean、完成依赖注入把Bean之前的关系补起
  • 把Bean放到容器Map里面

AOP

底层原理: 动态代理

针对普通类: 通过CGLib

针对实现接口的类: 使用Java原生动态代理来实现的, 由于Java原生动态代理的局限性

  -- 只能通过继承Proxy类才能实现动态代理, 而Java又是单继承模式的, 这个类假如继承了别的类就不能使用Java原生动态代理实现了

生命周期

  • 准备Spring的上下文环境
    • 比如XMLWebApplicationContext、AnnotationConfigApplicationContext, 准备去扫描XML文件和注解
  • 扫描XML文件和注解
    • 得到一个个BeanDefinition对象, 得到得是Bean的定义, 比如得到Bean的类、依赖关系、属性
  • BeanFactory后置处理
    • 调用BeanFactoryPostProcessor后置处理器, 对BeanDefinition要做一些处理, 对一些属性进行设置、替换
  • Bean的实例化
    • 采用反射机制把Bean对象创建出来
  • Bean的初始化
    • 对Bean的依赖关系进行属性的注入
  • Bean的后置处理
    • 调用BeanPostProcessor后置处理器, 对Bean进行后置处理, 比如AOP的操作, 对类进行切面增强
  • 放入Bean容器
  • Bean销毁
    • 当SpringApplicationContext要关闭的时候对Bean进行销毁, 主要调用DisposableBeanFactory销毁Bean工厂、或者Bean的destroy方法

posted on 2022-11-09 22:36  老菜农  阅读(110)  评论(0编辑  收藏  举报

导航