Spring源码学习(day04)

单例池

  1. 单例Bean != Spring容器中只有一个该类型的Bean, 同一个类型的Bean可以通过命名不同的 id 来生成相同类型Bean
  2. 单例池 -> ConcurrentHashMap<String , Object> singletonObject -> 用单例池来存放单例Bean

BeanFactory

  1. 顾名思义, BeanFactory就是Bean工厂, 用于生成Bean
  2. 可以注册一个BeanDefinition也可以注册一个对象
  3. 还可以销毁一个Bean, 判断某个Bean是否存在等等

ApplicationContext

  1. ApplicationContext 与 BeanFactory区别
    1. ApplicationContext接口包括了BeanFactory的功能, 在此基础上还有其他的功能拓展, 比如获取环境变量, 国际化, 事件发布, 资源解析等
  2. Spring配置的展现形式
    1. 注解形式

      1. AnnotationConfigApplicationContext
        1. 在这里插入图片描述
    2. XML形式

      1. ClasspathXmlApplicationContext

        1. 在这里插入图片描述
      2. FileSystemXmlApplicationContext

        1. 在这里插入图片描述
      3. 两者区别:

        1. ClasspathXmlApplicationContext会将classpath作为起始路径, FileSystemXmlApplicationContext将项目根目录作为起始路径, 且两者都支持绝对路径
  3. 是否可刷新
    1. 可刷新: ClasspathXmlApplicationContext

      1. 刷新会将当前容器中的bean对象全部销毁, 再重新加载配置文件对容器进行初始化, 生成bean对象, 如果在刷新过程中配置文件发生改变, 改变的部分也会生效
      2. 刷新前后得到的不是同一个对象在这里插入图片描述
    2. 不可刷新: AnnotationConfigApplicationContext

Bean的生命周期

  1. 实例化前

    1. 实现该接口可在实例化前/后进行操作在这里插入图片描述
    2. 若在实例化前返回了一个非空对象, 那么该对象就会被视为Bean对象, 之后的步骤除去初始化后其余步骤都不会进行
  2. 实例化

    1. 存在多个构造方法时, 如果没有特别指定, 会默认调用无参构造方法, 如果有特别指定(用@Autowired注解标记对应的构造方法) 则调用该构造方法, 如果多个构造方法标注@Autowired(required = true)则会报错, 如果构造方法都标注@Autowired(required = false)时, Spring会选择构造参数多的构造方法, 如果有多个构造参数个数相等的构造方法并且构造方法所需要的构造参数在容器中都能找到, Spring会选择最先定义的构造方法
  3. 实例化后

    1. 通过接口的返回值true/false 可以决定 Bean对象是否需要进行属性注入
  4. 属性填充

  5. 初始化前

    1. 需要实现BeanPostProcessor接口
    2. 初始化前方法返回null不会影响后续步骤执行, 但是其余的初始化前方法将不会被执行
    3. @PostConstruct注解同样可以对Bean对象的初始化前进行操作
  6. 初始化

    1. 实现该接口即可对Bean对象的初始化进行操作在这里插入图片描述
  7. 初始化后

    1. 经过初始化后方法返回的对象是最后容器getBean()得到的Bean对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值