Spring --02.Spring 中的工厂

版权声明:转载请注明原始链接 https://blog.csdn.net/sswqzx/article/details/83831596

1、概述

在Spring中提供了二个工厂接口

(1)、ApplicationContext

(2)、BeanFactory

2、ApplicationContext

使用该接口可以获取到具体的Bean对象、该接口下有二个具体的实现类

ClassPathXmlApplicationContext  --加载类路径下的Spring配置文件

FileSystemXmlApplicationContext --加载本地磁盘下的Spring配置文件

其他配置参照Spring--01spring入门

测试类:

package com.day01.test;

import com.day01.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 19:30 2018/11/7
 */
public class TestIoC {
    @Test
    public void test1(){
        //创建Spring工厂
        ApplicationContext ac  = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) ac.getBean("userDaos");
        userDao.save();
    }
    @Test
    public void test2(){
        ApplicationContext ac = new FileSystemXmlApplicationContext("D:/applicationContext.xml");
        UserDao userDaos = (UserDao) ac.getBean("userDaos");
        userDaos.save();
    }
}

3、BeanFactory

BeanFactory是Spring框架早期的创建Bean对象的工厂接口。在TestIOC中创建test3测试方法

package com.day01.test;

import com.day01.dao.UserDao;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
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;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 19:30 2018/11/7
 */
public class TestIoC {
    @Test
    public void test1(){
        //创建Spring工厂
        ApplicationContext ac  = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) ac.getBean("userDaos");
        userDao.save();
    }
    @Test
    public void test2(){
        ApplicationContext ac = new FileSystemXmlApplicationContext("D:/applicationContext.xml");
        UserDao userDaos = (UserDao) ac.getBean("userDaos");
        userDaos.save();
    }
    @Test
    public void test3(){
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        UserDao userDao = (UserDao) factory.getBean("userDaos");
        userDao.save();
    }
}

4、BeanFactory与ApplicationContext区别:

BeanFactory  --采用延迟加载、第一次getBean时才会被初始化Bean

ApplicationContext --在加载applicationContext.xml时就会创建具体的Bean对象的实例

修改UserDaoImpl,增加一个无参构造方法,运行test1和test3两个单元测试方法,验证ApplicationContext和BeanFactory这两个工厂到底什么时候创建bean对象

UserDaoImpl.java

package com.day01.dao.Impl;

import com.day01.dao.UserDao;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 19:28 2018/11/7
 */
public class UserDaoImpl implements UserDao {
    public UserDaoImpl(){
        System.out.println("调用了无参构造方法。。。");
    }

    @Override
    public void save() {
        System.out.println("持久层。。。。操作");
    }
}

TestIoc.java测试

package com.day01.test;

import com.day01.dao.UserDao;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
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;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 19:30 2018/11/7
 */
public class TestIoC {

    /**
     * 创建ioc容器时就已把对象创建好了
     */
    @Test
    public void test1(){
        //创建Spring工厂(创建 IOC容器)
        ApplicationContext ac  = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("--------------");
        UserDao userDao = (UserDao) ac.getBean("userDaos");
        userDao.save();
    }
    @Test
    public void test2(){
        ApplicationContext ac = new FileSystemXmlApplicationContext("D:/applicationContext.xml");
        UserDao userDaos = (UserDao) ac.getBean("userDaos");
        userDaos.save();
    }

    /**
     * BeanFactory
     * 创建ioc容器时并没有创建对象、而是第一次getBean时再创建对象
     */
    @Test
    public void test3(){
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        System.out.println("--------------------");
        UserDao userDao = (UserDao) factory.getBean("userDaos");
        userDao.save();
    }
}

运行test1

运行test3

猜你喜欢

转载自blog.csdn.net/sswqzx/article/details/83831596