03.Spring相关API

  • Spring的API体系异常庞大,我们现在只关注两个BeanFactory和ApplicationContext
  • 紫色部分:全都是接口
  • 浅绿色:抽象类
  • 绿色:具体的实现类

image-20220301141012742

(1)BeanFactory

BeanFactory是 IOC 容器的核心接口,它定义了IOC的基本功能。

  • 特点:在第一次调用getBean()方法时,创建指定对象的实例。
  @Test
    public void test2(){
        // 核心接口,不会创建bean对象存到容器中
        BeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        //getBean的时候才真正创建bean对象
        IUserDao userDao = (IUserDao) xmlBeanFactory.getBean("userDao");
        userDao.save();
    }

(2)ApplicationContext

代表应用上下文对象,可以获得spring中IOC容器的Bean对象。

  • 特点:在spring容器启动时,加载并创建所有对象的实例

           @Test
        public void UserTest(){
            //获取到Spring上下文对象,借助上下文对象可以获取IOC容器的bean对象
            // 1.底层利用dom4j解析applicationContext.xml文件
            // 2.根据传入的bean对象id参数实例化该对象
            // 3.利用该对象调用save方法。
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserDao userDao = (UserDao) applicationContext.getBean("userDao");
            userDao.save();
        }
    

两者的区别就是创建实例对象的时机不一样。

(3)其他常用实现类

  1. ClassPathXmlApplicationContext
    它是从类的根路径下加载配置文件 推荐使用这种。

  2. FileSystemXmlApplicationContext
    它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。

  3. AnnotationConfigApplicationContext
    当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。

    @Test
    public void test1(){
        // 获取到了spring上下文对象,借助上下文对象可以获取到IOC容器中的bean对象 ,加载的同时就创建了bean对象存到容器中
         ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //ApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext("D:\\spring_code\\spring_quickstart\\src\\main\\resources\\applicationContext.xml");
        // 使用上下文对象从IOC容器中获取到了bean对象
        // 1.根据beanid在容器中找对应的bean对象
        //IUserDao userDao = (IUserDao) classPathXmlApplicationContext.getBean("userDao");
        // 2.根据类型在容器中进行查询:有可能报错的情况:根据当前类型匹配到多个实例
        IUserDao userDao = classPathXmlApplicationContext.getBean("userDao",IUserDao.class);
        // 调用方法
        userDao.save();

    }

(4)常用方法

  1. Object getBean(String name);
    根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。
  2. T getBean(Class requiredType);
    根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错。
  3. T getBean(String name,Class requiredType);
    根据Bean的id和类型获得Bean实例,解决容器中相同类型Bean有多个情况

(5)知识小结

ApplicationContext app = new ClasspathXmlApplicationContext("xml文件");
  app.getBean("id");
  app.getBean(Class);
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐