在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用。
Spring 提供了两种类型的 IOC 容器实现:
- BeanFactory: IOC 容器的基本实现
- ApplicationContext: 提供了更多的高级特性. 是 BeanFactory 的子接口。
BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;
ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext 而非底层的 BeanFactory
无论使用何种方式, 配置文件时相同的。
第一种:使用XmlBeanFactory+Resource(不常用)
//获得spring资源,加载配置文件
Resource resource = new ClassPathResource("applicationContext.xml");
//获得spring的容器实例,BeanFactory这是一个抽象的接口
BeanFactory factory = new XmlBeanFactory(resource);
//从容器中找到我们的bean,也就是我们的类
HelloWorld = (HelloWorld)factory.getBean("hello");
第二种:使用ClassPathXmlApplicationContext(常用)
//从项目的类路径下加载application.xml
//1.创建Spring IOC容器 执行了无参构造方法和setXXX方法。
//ApplicationContext代表IOC容器,ClassPathXmlApplicationContext是它的实现类
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//2.从IOC容器中获取Bean对象
// 2.1 通过类型进行获取 要求在IOC容器里面是唯一的
//HelloWorld bean = context.getBean(HelloWorld.class);
//2.2 通过配置文件中bean对象的id获取
HelloWorld bean = (HelloWorld)context.getBean("hello");
//3.调用HelloWorld实例对象中的sayHello()方法
bean.sayHello();
第三种:使用FileSystemXmlApplicationContext
//从文件系统中加载配置文件
ApplicationContext context = new FileSystemXmlApplicationContext("E:\\JavaWorkSpace\\idea_project\\SpringDemo\\src\\main\\resources\\applicationContext.xml");
HelloWorldhi = (HelloWorld)context.getBean("hello");
第四种:在Servlet中加载配置文件
//从WEB-INF下加载配置文件
ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext context= WebApplicationContextUtils.getWebApplicationContext(servletContext);
HelloWorldhi = (HelloWorld)context.getBean("hello");