Spring容器
1 Spring核心容器介紹
問題導入
問題:按照Bean名稱獲取Bean有什么弊端,按照Bean類型獲取Bean有什么弊端?
1.1 創建容器
- 方式一:類路徑加載配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
- 方式二:文件路徑加載配置文件
ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\applicationContext.xml");
- 加載多個配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean1.xml", "bean2.xml");
1.2 獲取bean對象
- 方式一:使用bean名稱獲取
弊端:需要自己強制類型轉換
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
- 方式二:使用bean名稱獲取并指定類型
弊端:推薦使用
BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
- 方式三:使用bean類型獲取
弊端:如果IOC容器中同類型的Bean對象有多個,此處獲取會報錯
BookDao bookDao = ctx.getBean(BookDao.class);
1.3 容器類層次結構
1.4 BeanFactory
- 類路徑加載配置文件
Resource resources = new ClassPathResource("applicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resources);
BookDao bookDao = bf.getBean("bookDao", BookDao.class);
bookDao.save();
- BeanFactory創建完畢后,所有的Bean均為延遲加載,也就是說我們調用getBean()方法獲取Bean對象時才創建Bean對象并返回給我們
2 Spring核心容器總結
2.1 容器相關
- BeanFactory是IoC容器的頂層接口,初始化BeanFactory對象時,加載的bean延遲加載
- ApplicationContext接口是Spring容器的核心接口,初始化時bean立即加載
- ApplicationContext接口提供基礎的bean操作相關方法,通過其他接口擴展其功能
- ApplicationContext接口常用初始化類
- ClassPathXmlApplicationContext(常用)
- FileSystemXmlApplicationContext