导读
Spring IoC 容器负责创建对象、管理对象,装配对象、配置对象、并且管理这些对象的生命周期。本文涉及代码均为部分代码,仅仅供个人学习记录参考。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hc0YzrMq-1647929291235)(./images/L02.png)]
1、IoC 依赖查找
- 根据 Bean 名称查找
- 根据 Bean 类型查找
- 根据 Bean 名称 + 类型查找
- 根据Java 注解查
//根据名称-实时查找
User user = (User) beanFactory.getBean("user");
//根据名称-延迟查找
ObjectFactory<User> objectFactory = (ObjectFactory<User>) beanFactory.getBean("objectFactory");
User userObject = objectFactory.getObject();
// 根据类型查找
User user = beanFactory.getBean(User.class);
ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
Map<String, User> users = listableBeanFactory.getBeansOfType(User.class);
// 根据名称和类型查找
User user = beanFactory.getBean("user", User.class);
// 根据 Java 注解查找
ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
Map<String, User> users = (Map) listableBeanFactory.getBeansWithAnnotation(Super.class);
2、IoC 依赖注入
- 根据 Bean 名称注入
- 根据 Bean 类型注入
- 注入容器内建 Bean 对象
- 注入 非 Bean 对象
3、IoC 依赖来源
- 自定义 Bean
- 容器内建 Bean 对象
- 容器内建依赖
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:META-INFO/dependency-injection-context.xml");
// 依赖来源一:自定义 Bean
UserRepository userRepository = applicationContext.getBean("userRepository",UserRepository.class);
// 依赖来源二:依赖注入(內建依赖)
System.out.println(userRepository.getBeanFactory());
// 依赖来源三:容器內建 Bean
Environment environment = applicationContext.getBean(Environment.class);
4、IoC 配置元信息
- 基于XML 文件
- 基于 Properties 文件
- 基于 Java 注解
- 基于 Java API
5、IoC 容器生命周期
- 启动
- 运行
- 停止
// 创建 BeanFactory 容器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
// 将当前类 AnnotationApplicationContextAsIoCContainerDemo 作为配置类(Configuration Class) applicationContext.register(AnnotationApplicationContextAsIoCContainerDemo.class);
// 启动应用上下文
applicationContext.refresh();
// 依赖查找集合对象
lookupCollectionByType(applicationContext);
// 关闭应用上下文
applicationContext.close();
6、Bean Factory 与 FactoryBean 区别?
(1) 两个都是个工厂,但FactoryBean
本质上还是一个Bean,也归BeanFactory
管理。
(2)BeanFactory
是Spring容器的顶层接口,FactoryBean
更类似于用户自定义的工厂接口。FactoryBean在Spring中最为典型的一个应用就是用来创建AOP的代理对象
7、IoC 容器启动时做了哪些准备?
IoC 配置元信息读取和解析、IoC 容器生命周期、Spring 事件发布、国际化等。