Spring基礎學習筆記(二)
阿新 • • 發佈:2018-12-30
原始碼根目錄(spring-framework-4.1.2.RELEASE)
最少新增jar檔案
applicationContext.xml標準命名
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- id對應於物件的名稱,class類似於new 後面的類名:全限定類名,一般都不能寫介面和抽象類 --> <bean id="myBean" class="cn.mytest.spring.day1.d_test.MyBean" ></bean> </beans>
配置檔案的提示資訊(程式碼提示)
Junit
public class MainTest { @Test public void testName() throws Exception { // 解析配置檔案 ClassPathResource resource = new ClassPathResource("applicationContext.xml"); // 獲取BeanFactory BeanFactory beanFactory = new XmlBeanFactory(resource); // 通過bean.id獲取bean物件 MyBean bean = (MyBean) beanFactory.getBean("myBean"); // 呼叫方法 String hi = bean.hi("小紅"); System.out.println(hi); } }
BeanFacotry.getBean方法(測試現在都用的少,用的多的是spring-test-4.1.2.RELEASE註解測試)
第一種
根據bean id獲取bean的例項,如果定義了2個bean不會報錯(獲取物件必須要強轉)
// 通過bean.id獲取bean物件
// 根據bean id獲取bean的例項,如果定義兩個bean不會報錯
// 獲取物件必須強轉
MyBean bean = (MyBean) beanFactory.getBean("myBean");
<!-- id對應於物件的名稱,class類似於new 後面的類名:全限定類名,一般都不能寫介面和抽象類 --> <bean id="myBean" class="cn.mytest.spring.day1.b_beanfactory.MyBean"></bean> <bean id="myBean1" class="cn.mytest.spring.day1.b_beanfactory.MyBean"></bean>
第二種
除了型別不用強轉,其他同第一種
// 通過bean.id獲取bean物件
// 除了型別不用強轉,其他同第一種
MyBean bean = beanFactory.getBean("myBean", MyBean.class);
第三種
必須要求配置檔案裡面只能配置一個MyBean的例項,配置多個異常:
// 通過bean.id獲取bean物件
// 必須要求配置檔案裡面只能配置一個MyBean的例項,配置多個異常
MyBean bean = (MyBean) beanFactory.getBean(MyBean.class);
API
ApplicationContext(是BeanFactory的子介面)
功能更多
應用上下檔案ApplicationContext是建立在BeanFactory基礎上的一種更高層次的Spring IoC容器,其除了具有普通BeanFactory的全部功能以外,還加入了以下功能:
提供了文字資訊解析工具,包括I18N的支援
提供了載入檔案資源的通用方法
提供了傳送事件的功能
@Test
public void testName2() throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("cn/mytest/spring/day1/c_application/bean.xml");
MyBean bean = (MyBean) context.getBean("myBean");
String hi = bean.hi("小紅");
System.out.println(hi);
}
web.xml:提供web程式用法
面試題:
問ApplicationContext和BeanFactory的區別
最重要的區別:例項化bean物件的時機
ApplicationContext和BeanFactory的一個比較重要的區別就是,
ApplicationContext會在啟動的時候自動去初始化配置的bean(預設配置),
而BeanFactory只是在用到bean的時候再去初始化Bean。
這個過程可以通過bean的construtor來跟蹤。
而通過lazy-init配置,可以手動的在ApplicationContext環境下控制bean的初始化時機。如果想對所有bean都應用延遲初始化,可以在根節點beans設定default-lazy-init=“true“,如下:
<beans default-lazy-init="true“ ...>