spring bean的生命周期
2021-07-15 10:42:20 23 举报
spring bean的生命周期spring bean的生命周期spring bean的生命周期spring bean的生命周期spring bean的生命周期spring bean的生命周期
作者其他创作
大纲/内容
每个beanName都被放入List集合中,作为List的元素。
xxxx=\"xxx\"
...
value
描述...类
Java编译器
beanName3
beanName1
beanClass=X.class
Food.bean
Spring单例池(也是一个map)
ClassLoader将字节码加载进jvm
key
然后调用preInstantiateSingletons()方法,遍历这个map中的所有BeanDefinition,验证这些类是否单例、自动装配、原型、懒加载、dependson等等。符合spring的规则才会实例化(new)这些类,放入Spring单例池中(也是一个map,key是beanName,value是BeanDefinition)
Car类
放入map中
isAbstract
List集合
beanClass=xxx
beanName2
BeanDefinition
beanName
isAutowired
beanClass
scope
将每个class包装成每一个对应的BeanDefinition
Y.bean
每一个BeanDefinition都会被放入这个Map中,key是BeanDefinition的beanName,value是BeanDefinition
scope=singleton
beanName4
beanClass=Y.class
获取User类(其beanName=user)对应的BeanDefinitionGenernirBeanDefinition bean = beanFactory.getBeanDefinition(\"user\");改变该bean的一些属性(就是扩展)bean.setBeanClass(xxx.class);bean.setXXX();...
JVM
Java中的类(此时是.java文件)
Person类
如果想对sprng做扩展,只需创建一个类并且实现BeanPostProcess接口,在该类的实现方法(map会被传到方法里面)里面做修改即可。实际上是从这个map中拿到里面的BeanDefinition,然后对BeanDefinition做修改(即修改了map的value,但是注意,map的key还是没有被修改过的,所以如果修改了BeanDefinition的beanClass,但是在测试方法中仍能根据原本的key获取到新修改的bean,后面会给出代码详述)
此时变成字节码,即.class文件
beanName被放入List中
preInstantiateSingletons
描述X类
isSingleton
Y类
Animal类
isPrototype
Student类
X类
isLazy
List会被遍历,里面所有的beanName作为map的key
被遍历
description
Food类
扫描指定包以及其子包下的所有class文件。收集这些class的所有注解信息(一般也叫元数据,或元信息)
描述Y类
isPrimary
Student.bean
经过编译
更新map
创建一个类实现BeanPostProcessor接口
做扩展
X.bean
作修改(即扩展):
收藏
收藏
0 条评论
下一页