L02_什么是IoC容器?

导读

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 事件发布、国际化等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值