前言
利用一个简单的例子作为入门分析
spring
配置组件
UserService就是bean
class中为
当spring框架加载时,spring会去查看是否有bean,有bean就会去实例化bean,并装载到内存里,即并从class中找到bean,并实例化userService,然后调用setName(),将value的值传入。
理解:
- 在xml中配置各种bean
- UserService是其中一个,id为userService
- 主程序中利用类路径加载文件
- 也就是相当于实例化ApplicationContect对象,这个对象对应于传入的xml文件
- 该对象中有很多bean
- spring框架编译时通过各自的class找到这些bean,实例化,并分配内存
- 因为有多个bean,所以通过getBean获取对应名称的bean(id),并进行类型转换
- 获取到bean后就可以调用该bean中的方法
步骤
多个bean
独立的多个bean
维护bean之间的关系(引用)
第一个是UserService中的属性
ref:引用
第二个是引用的bean
分析
问题:
spring架构的加载、bean的创建、bean与bean怎么被维护:
如果没有调用其他bean,那么
当程序执行时,spring容器对象被创建,
同时对象中的bean被创建,并载入内存
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
语句执行时,spring框架被调用,
同时applicationContext.xml中配置的bean对象就会被创建(可以看成hashmap/hashtable)
也就是
语句被执行时,
内存跟xml那边会==对应==起来
对应:反射机制(用来做框架)
这部分由spring完成
内存
id 对象
userService UserService(name,byeService(??))
创建的实例
内存(applicationContext对象引用)(结构类似Hashmap)
id 对象
userService UserService(name,byeService(0x234))
地址 创建的实例
byeService(0x234) ByeService(name)
spring扫描xml,用反射机制在内存中创建bean,其实内存可以理解为applicationContext对象引用,
保证applicationContext单态
getBean取出的userService,所以us就是userService
反射机制:
总结: