版权声明:转载请注明原始链接 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