這實現包括屬性,它的Setter , getter 方法和函數等。
Spring AOP。
Spring 的XML 配置文件。
使用以上功能的客戶端程序。
依賴注入
18. 什么是Spring的依賴注入?
依賴注入,是IOC的一個方面,是個通常的概念,它有多種解釋。這概念是說你不用創建對象,而只需要描述它如何被創建。你不在代碼里直接組裝你的組件和服務,但是要在配置文件里描述哪些組件需要哪些服務,之后一個容器(IOC容器)負責把他們組裝起來。
19. 有哪些不同類型的IOC(依賴注入)方式?
構造器依賴注入:構造器依賴注入通過容器觸發一個類的構造器來實現的,該類有一系列參數,每個參數代表一個對其他類的依賴。
Setter方法注入:Setter方法注入是容器通過調用無參構造器或無參static工廠 方法實例化bean之后,調用該bean的setter方法,即實現了基于setter的依賴注入。
20. 哪種依賴注入方式你建議使用,構造器注入,還是 Setter方法注入?
你兩種依賴方式都可以使用,構造器注入和Setter方法注入。最好的解決方案是用構造器參數實現強制依賴,setter方法實現可選依賴。
Spring Beans
21.什么是Spring beans?
Spring beans 是那些形成Spring應用的主干的java對象。它們被Spring IOC容器初始化,裝配,和管理。這些beans通過容器中配置的元數據創建。比如,以XML文件中 的形式定義。
Spring 框架定義的beans都是單件beans。在bean tag中有個屬性”singleton”,如果它被賦為TRUE,bean 就是單件,否則就是一個 prototype bean。默認是TRUE,所以所有在Spring框架中的beans 缺省都是單件。
22. 一個 Spring Bean 定義 包含什么?
一個Spring Bean 的定義包含容器必知的所有配置元數據,包括如何創建一個bean,它的生命周期詳情及它的依賴。
23. 如何給Spring 容器提供配置元數據?
這里有三種重要的方法給Spring 容器提供配置元數據。
XML配置文件。
基于注解的配置。
基于java的配置。
24. 你怎樣定義類的作用域?
當定義一個 在Spring里,我們還能給這個bean聲明一個作用域。它可以通過bean 定義中的scope屬性來定義。如,當Spring要在需要的時候每次生產一個新的bean實例,bean的scope屬性被指定為prototype。另一方面,一個bean每次使用的時候必須返回同一個實例,這個bean的scope 屬性 必須設為 singleton。
25. 解釋Spring支持的幾種bean的作用域。
Spring框架支持以下五種bean的作用域:
singleton : bean在每個Spring ioc 容器中只有一個實例。
prototype:一個bean的定義可以有多個實例。
request:每次http請求都會創建一個bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
session:在一個HTTP Session中,一個bean定義對應一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
global-session:在一個全局的HTTP Session中,一個bean定義對應一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean 的作用域是Singleton.
26. Spring框架中的單例bean是線程安全的嗎?
不,Spring框架中的單例bean不是線程安全的。
27. 解釋Spring框架中bean的生命周期。
Spring容器 從XML 文件中讀取bean的定義,并實例化bean。
Spring根據bean的定義填充所有的屬性。
如果bean實現了BeanNameAware 接口,Spring 傳遞bean 的ID 到 setBeanName方法。
如果Bean 實現了 BeanFactoryAware 接口, Spring傳遞beanfactory 給setBeanFactory 方法。
如果有任何與bean相關聯的BeanPostProcessors,Spring會在postProcesserBeforeInitialization()方法內調用它們。
如果bean實現IntializingBean了,調用它的afterPropertySet方法,如果bean聲明了初始化方法,調用此初始化方法。
如果有BeanPostProcessors 和bean 關聯,這些bean的postProcessAfterInitialization() 方法將被調用。
如果bean實現了 DisposableBean,它將調用destroy()方法。
28. 哪些是重要的bean生命周期方法? 你能重載它們嗎?
有兩個重要的bean 生命周期方法,第一個是setup , 它是在容器加載bean的時候被調用。第二個方法是 teardown 它是在容器卸載類的時候被調用。
The bean 標簽有兩個重要的屬性(init-method和destroy-method)。用它們你可以自己定制初始化和注銷方法。它們也有相應的注解(@PostConstruct和@PreDestroy)。
29. 什么是Spring的內部bean?
當一個bean僅被用作另一個bean的屬性時,它能被聲明為一個內部bean,為了定義inner bean,在Spring 的 基于XML的 配置元數據中,可以在 或 元素內使用 元素,內部bean通常是匿名的,它們的Scope一般是prototype。
30. 在 Spring中如何注入一個java集合?
Spring提供以下幾種集合的配置元素:
類型用于注入一列值,允許有相同的值。
類型用于注入一組值,不允許有相同的值。
類型用于注入一組鍵值對,鍵和值都可以為任意類型。
類型用于注入一組鍵值對,鍵和值都只能為String類型。