核心容器的区别:
ApplicationContext: 单例对象适用 ,采用此接口
它在构建核心容器时,创建对象采取的策略是采用立即加载的方式。也就是说,只要一读取完配置文件马上就创建配置文件中配置的对象。
package Ui;
import Dao.IAccountDao;
import Service.IAccountServlet;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Client {
public static void main(String[] args) {
//获取核心容器
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
System.out.println("FileSystemXmlApplicationContext");
//根据id获取bean对象。
// 方法一:强转
IAccountServlet accountServlet= (IAccountServlet) ac.getBean("accountServlet");
//方法二:字节码
IAccountDao accountDao=ac.getBean("accountDao",IAccountDao.class);
System.out.println(accountServlet);
System.out.println(accountDao);
}
}
执行顺序结果。(读取完配置文件就直接创建所有对象,无论是否用得到)
BeanFactory: 多例对象使用
它在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。
//获取核心容器
Resource resource=new ClassPathResource("bean.xml");
XmlBeanFactory beanFactory=new XmlBeanFactory(resource);
System.out.println("BeanFactory");
// 方法一:强转
IAccountServlet accountServlet= (IAccountServlet) beanFactory.getBean("accountServlet");
//方法二:字节码
IAccountDao accountDao=beanFactory.getBean("accountDao",IAccountDao.class);
accountServlet.SaveAccount();
运行顺序(获取对象的时候才创建对象,只在本java文件中有效)