package com.aping.ui;
import com.aping.service.IAccountService;
import com.aping.service.impl.IAccountServiceImpl;
import javafx.application.Application;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
/**
* 获取spring的IoC核心容器,并根据id获取对象
*
* ApplicationContext的三个常用实现类
* ClassPathXmlApplicationContext:它可以加载类路径下的配置文件,要求配置文件必须在类路径下,否则加载不了
* FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限)
* AnnotationConfigApplicationContext:它是用于读取注解创建容器的
*
* 核心容器的两个接口引发出的问题
* ApplicationContext:单例对象适用 更多采用此接口
* 它在构建核心容器时,创建对象采取的策略是采用立即加载的
* 方式,也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象
* BeanFactory:多例对象适用
* 它在构建核心容器时,创建对象采取的策略是采用延迟加载的方式,也就是
* 什么时候根据id获取对象了,什么时候才真正的创建对象
*/
public class Client {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
//1.获取核心容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//FileSystemXmlApplicationContext的用法
//ApplicationContext ac = new FileSystemXmlApplicationContext("D:\\java\\workspace\\day01_03spring\\src\\main\\resources");
//2.根据id获取Bean对象
IAccountService service = (IAccountService)ac.getBean("accountService");
//或者不使用强转,而是再传入字节码,由ac完成强转
//IAccountService service = ac.getBean("accountService",IAccountService.class);
System.out.println(service);
//------BeanFactory-------
Resource resource = new ClassPathResource("bean.xml");
BeanFactory factory = new XmlBeanFactory(resource);
IAccountService service1 = (IAccountService)factory.getBean("accountService");
System.out.println(service1);
}
}
5_BeanFactory与ApplicationContext的区别
最新推荐文章于 2022-08-30 10:02:27 发布