ApplicationContext的三个实现类、ApplicationContext和BeanFactory的区别
ApplicationContext的三个实现类
ClassPathXmlApplicationContext
它加载类路径下的配置文件,要求配置文件必须在类路径下,不在的话加载不了
FileSystemXmlApplicationContext
它可以加载磁盘的任意路径下的配置文件(必须有访问控制权限)
AnnotationConfigApplicationContext
用于读取注解创建容器
ApplicationContext和BeanFactory
ApplicationContext
它在创建核心容器时,创建对象采用的策略是采用立即加载的方式,既只要一读取配置文件就马上创建配置文件中的对象。
BeanFactory
它构建核心容器时,创建对象采用的 策略是采用延迟加载的方式,既什么时候根据id获取对象了,什么时候才真正的创建对象。
两者之间的继承关系:ApplicationContext接口实现了BeanFactory接口
ApplicationContext立即加载(结合之前的Spring入门案例的代码)
public class AccountServiceImpl implements IAccountService {
private IAccountDao accountDao = new AccountDaoImpl();
public AccountServiceImpl(){
System.out.println("对象创建了");
}
public void saveAccount(){
accountDao.saveAccount();
}
}
在Client创建和心容器打断点调试
继续往下执行
BeanFactory延迟加载
使用BeanFactory获取核心容器,打断点调试
继续往下执行,直到使用对象的地方BeanFactory才开始创建对象
BeanFactory是顶层接口,在实际开发中ApplicationContext比较常用,它比BeanFactory的功能更加的完善。
service和dao是单例,没有类成员变量,不存在线程安全。