1. spring是什麼
輕量級開源框架 以 IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面編程)爲內核。 還能整合開源世界衆多著名的第三方框架和類庫。
2. spring解決了什麼問題
方便解耦,簡化開發。 普通項目中A模塊用到B模塊,需要使用到new關鍵字,那麼當B模塊不存在時,A模塊編譯報錯。(這就是程序耦合) 解決方案: 我們可以使用反射技術來實現B的調用,提供B的全限定類名,使用Class.forname(""),方法去加載B,那麼編譯的時候就不會報錯,不過運行時沒有B,報運行異常。 AOP 編程的支持 通過 Spring 的 AOP 功能,方便進行面向切面的編程,許多不容易用傳統 OOP 實現的功能可以通過 AOP 輕鬆應付。 聲明式事務的支持 可以將我們從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活的進行事務的管理,提高開發效率和質量。 方便程序的測試 可以用非容器依賴的編程方式進行幾乎所有的測試工作,測試不再是昂貴的操作,而是隨手可做的事情。 方便集成各種優秀框架 降低 JavaEE API 的使用難度 Java 源碼是經典學習範例
3. spring如何去維護javabean
在配置文件中配置JavaBean的相關信息(唯一標識,全限定類名,可以需要的數據等等)。 在程序中根據加載配置文件,產生ioc容器,使用容器的getBean方法,根據唯一標識獲取相關的JavaBean。
4. 構建spring工廠或容器的兩種方式
BeanFactory 和 ApplicationContext的區別 創建對象的時間點不一樣。 ApplicationContext:只要一讀取配置文件,默認情況下就會創建對象。 BeanFactory:什麼使用什麼時候創建對象。 ApplicationContext的三個實現類 *ClassPathXmlApplicationContext: 它是從類的根路徑下加載配置文件 推薦使用這種 *FileSystemXmlApplicationContext: 它是從磁盤路徑上加載配置文件,配置文件可以在磁盤的任意位置。 *AnnotationConfigApplicationContext: 當我們使用註解配置容器對象時,需要使用此類來創建 spring 容器。它用來讀取註解。
5. bean標籤的使用
默認情況下使用空參構造方法實例化對象,如果沒有就沒辦法創建。 屬性:
id: class: scope:指定對象的作用範圍。 init-method:指定類中的初始化方法名稱。 destroy-method:指定類中銷燬方法名稱。 指定對象的作用範圍:
singleton :默認值,單例的. prototype :多例的. request :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 request 域中. session :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 session 域中. global session :WEB 項目中,應用在 Portlet 環境.如果沒有 Portlet 環境那麼 globalSession 相當於 session.
6. bean的生命週期
單例對象:scope=“singleton” 一個應用只有一個對象的實例。它的作用範圍就是整個引用。 生命週期: 對象出生:當應用加載,創建容器時,對象就被創建了。 對象活着:只要容器在,對象一直活着。 對象死亡:當應用卸載,銷燬容器時,對象就被銷燬了。 多例對象:scope=“prototype” 每次訪問對象時,都會重新創建對象實例。 生命週期: 對象出生:當使用對象時,創建新的對象實例。 對象活着:只要對象在使用中,就一直活着。 對象死亡:當對象長時間不用時,被 java 的垃圾回收器回收了。
7. bean的三種實例化方式
默認使用空參構造函數實例化 使用靜態工廠實例化
/**
* 模擬一個靜態工廠,創建業務層實現類
*/
public class StaticFactory {
public static IAccountService createAccountService(){
return new AccountServiceImpl();
} }
複製代碼
<!-- 此種方式是:
使用 StaticFactory 類中的靜態方法 createAccountService 創建對象,並存入 spring 容器
id 屬性:指定 bean 的 id,用於從容器中獲取
class 屬性:指定靜態工廠的全限定類名
factory-method 屬性:指定生產對象的靜態方法
--> <bean id="accountService"
class="com.itheima.factory.StaticFactory"
factory-method="createAccountService"></bean>
複製代碼
spring 管理實例工廠-使用實例工廠的方法創建對象
/**
* 模擬一個實例工廠,創建業務層實現類
* 此工廠創建對象,必須現有工廠實例對象,再調用方法
*/
public class InstanceFactory {
public IAccountService createAccountService(){
return new AccountServiceImpl();
} }
複製代碼
<!-- 此種方式是:
先把工廠的創建交給 spring 來管理。
然後在使用工廠的 bean 來調用裏面的方法
factory-bean 屬性:用於指定實例工廠 bean 的 id。
factory-method 屬性:用於指定實例工廠中創建對象的方法。
--> <bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService"
factory-bean="instancFactory"
factory-method="createAccountService"></bean>
複製代碼
8. bean依賴注入(成員變量的賦值)
構造函數注入
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<constructor-arg name="name" value="張三"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean> <bean id="now" class="java.util.Date"></bean>
複製代碼
set注入
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<property name="name" value="test"></property>
<property name="age" value="21"></property>
<property name="birthday" ref="now"></property>
</bean>
<bean id="now" class="java.util.Date"></bean>
複製代碼
使用 p 名稱空間注入數據(本質還是調用 set 方法)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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">
<bean id="accountService"
class="com.itheima.service.impl.AccountServiceImpl4"
p:name="test" p:age="21" p:birthday-ref="now"/>
</beans>
複製代碼
9. bean注入集合屬性(成員變量的賦值)
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
<!-- 在注入集合數據時,只要結構相同,標籤可以互換 -->
<!-- 給數組注入數據 -->
<property name="myStrs">
<set>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</set>
</property>
<!-- 注入 list 集合數據 -->
<property name="myList">
<array>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</array>
</property>
<!-- 注入 set 集合數據 -->
<property name="mySet">
<list>
<value>AAA</value>
<value>BBB</value>
<value>CCC</value>
</list>
</property>
<!-- 注入 Map 數據 -->
<property name="myMap">
<props>
<prop key="testA">aaa</prop>
<prop key="testB">bbb</prop>
</props>
</property>
<!-- 注入 properties 數據 -->
<property name="myProps">
<map>
<entry key="testA" value="aaa"></entry>
<entry key="testB"> <value>bbb</value></entry>
</map>
</property>
</bean>
複製代碼
覺得這篇文章有幫助的點贊關注小編私信關鍵字(spring)可獲得免費最新spring電子版書籍哦