面试题答案
一键面试实现步骤
- 配置解析:Spring通过读取配置文件(如XML或注解配置),解析出Bean的定义信息,包括Bean的类名、属性及依赖关系等。
- 类加载:根据配置中获取的类名,使用
Class.forName()
方法加载对应的类,得到Class
对象,反射机制开始发挥作用。 - 实例化Bean:利用反射的
Constructor.newInstance()
方法创建Bean实例。如果Bean定义了构造函数参数,Spring会通过反射获取构造函数,并传入相应参数进行实例化。 - 依赖注入:通过反射获取Bean类的属性的
Field
对象,再利用Field.set()
方法为属性注入依赖的对象。如果属性通过@Autowired
等注解标记,Spring会查找容器中匹配的Bean进行注入。
关键类
- BeanDefinition:存储Bean的定义信息,包括类名、作用域、构造函数参数、属性等,是Spring对Bean的元数据描述。
- BeanFactory:Spring容器的顶级接口,负责管理Bean的创建、配置和生命周期。它是依赖注入的核心,通过反射机制根据
BeanDefinition
创建和管理Bean。 - ApplicationContext:继承自
BeanFactory
,提供了更多企业级功能,如事件发布、国际化等。它同样利用反射来完成Bean的创建和依赖注入。 - ConstructorResolver:负责处理Bean的构造函数注入,通过反射解析构造函数参数,并创建Bean实例。
- AutowiredAnnotationBeanPostProcessor:处理
@Autowired
等注解驱动的依赖注入。它通过反射查找需要注入的属性和方法,并完成注入操作。