1. 程式人生 > >Spring基礎學習筆記(二)

Spring基礎學習筆記(二)

 

原始碼根目錄(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“ ...>