BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean为延迟加载
ApplicationContext接是Spring容器的核心接口,初始化时bean立即加载
ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
常用初始化类:
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
创建容器的两种方式
1.加载类路径下的配置文件(常用)
ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");
2.从文件系统下加载配置文件
//使用绝对路径
ApplicationContext ctx=new FileSystemXmlApplicationContext("D:\\reborn\\data\\spring_datasource\\src\\main\\resources\\ApplicationContext.xml");
//
3.加载多个配置
//该方式相当于合并了两个xml中的内容
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean1.xml,bean2.xml");
获取bean的三种方式
//使用强制转换类型的方式获取bean
BookDao bookDao= (BookDao) ctx.getBean("bookDao");
//按照bean的名称与类型获取
BookDao bookDao1= ctx.getBean("bookDao",BookDao.class);
//按照bean的类型class获取
//注意:当有多个类的对象bean时按照bean.class方式匹配结果不唯一会出错
BookDao bookDao2= (BookDao) ctx.getBean(BookDao.class);
ApplicationContext与BeanFactory加载bean的区别
BeanFactory是延迟加载bean,构造函数延迟执行
ApplicationContext是立即加载bean,构造函数立即执行
通过lazy-init的方式可以将ApplicationContext同样设置为延迟加载bean
<bean id="bookDao" class="com.learn.dao.impl.BookDaoImpl" lazy-init="true">
<property name="name" value="${username}"/>
</bean>
BeanFactory初始化(了解)
Resource resource=new ClassPathResource("ApplicationContext.xml");
BeanFactory beanFactory=new XmlBeanFactory(resource);
//该方式生成的bean均为延迟加载
BookDao bookDao=beanFactory.getBean("bookDao",BookDao.class);
bookDao.save();