携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
哈喽,大家好!我是Why,一名在读学生,目前刚刚开始进入自己的编程学习生涯。虽然学习起步较晚,但我坚信做了才有0或1的可能。学了一段时间以后也是选择在掘金上分享自己的日常笔记,也希望能够在众多道友的大家庭中打成一片。 本文主要讲解Spring容器创建对象的三个方式,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬 ✨✨✨个人主页:JinHuan
控制反转IOC
Ioc是一种思想,而不是技术!
Ioc是指在程序开发过程中,实例的创建不再由调用者管理,而是由Spring容器创建。Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到Spring容器中,控制权发生了反转,这就是Ioc思想
Spring容器创建对象的三个方式
1、BeanFactory
BeaFactory是一个基础类的Ioc容器(已过时),它主要负责初始化各种Bean,并调用它们的声明周期方法
最常见的就是org.Springframework.beans.factory.xml.XmlBeanFactory,它是根据 XML 配置文件中的定义装配 Bean 的。
//获取容器
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("F:\MySpring\spring01\src\main\resources\applicationContext.xml"));
beanFactory.getBean("team1");//根据Id从IOC容器中获取该对象
2、ApplicationContext
ApplicationContext 是 BeanFactory 的子接口,也被称为应用上下文。它不仅提供了 BeanFactory 的所有功能,还添加了对 i18n(国际化)、资源访问、事件传播等方面的良好支持。 ApplicationContext 接口有两个常用的实现类:
ClassPathXmlApplicationContext——常用推荐
该类从类路径 ClassPath 中寻找指定的 XML 配置文件,找到并装载完成 ApplicationContext 的实例化工作
//Spring配置文件
String springConfig = "applicationContext.xml";
//获取容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(springConfig);
//默认获取的是Object类型,需要强转
Team team3 = (Team) applicationContext.getBean("team3");
FileSystemXmlApplicationContext
它与 ClassPathXmlApplicationContext 的区别是:在读取 Spring 的配置文件时, FileSystemXmlApplicationContext 不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,它可以获取类路径之外的资源,如“D:\application.xml”。
//获取容器
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("F:\MySpring\spring01\src\main\resources\applicationContext.xml");
//默认获取的是Object类型,需要强转
Team team3 = (Team) applicationContext.getBean("team3");
BeanFactory与ApplicationContex的区别
BeanFactory,其参数必须是绝对路径,
BeanFactory的对象创建时机是在使用getbean的时候,那个对象被getbean了,那个对象就被创建出
ApplicationContext是一旦获取容器就立即创建