spring框架的介紹

小么學PY發表於2020-12-04

===========================IOC/AOP/DI==============================
ioc就是控制翻轉或是依賴注入。通俗的講就是如果在什麼地方需要一個物件,你自己不用去通過new 生成你需要的物件,而是通過spring的bean工廠為你長生這樣一個物件。

aop就是面向切面的程式設計。比如說你每做一次對資料庫操作,都要生成一句日誌。如果,你對資料庫的操作有很多類,那你每一類中都要寫關於日誌的方法。但是如果你用aop,那麼你可以寫一個方法,在這個方法中有關於資料庫操作的方法,每一次呼叫這個方法的時候,就加上生成日誌的操作

=====================================spring 框架介紹 ==========================================================

它關注的領域是其他許多流行的Framework未曾關注的。Spring要提供的是一種管理你的業務物件的方法。 

Spring既是全面的又是模組化的。Spring有分層的體系結構,這意味著你能選擇僅僅使用它任何一個獨立的部分,而它的架構又是內部一致。因此你能從你的學習中,得到最大的價值。例如,你可能選擇僅僅使用Spring來簡單化JDBC的使用,或用來管理所有的業務物件。 

它的設計從一開始就是要幫助你編寫易於測試的程式碼。Spring是使用測試驅動開發的工程的理想框架。 

Spring不會給你的工程新增對其他的框架依賴。Spring也許稱得上是個一站式解決方案,提供了一個典型應用所需要的大部分基礎架構。它還涉及到了其他framework沒有考慮到的內容。  


======================================Spring Bean生命週期=============================

一、Bean的定義
二、Bean的初始化
三、Bean的呼叫
四、Bean的銷燬  

=================================spring資料來源===============================
在Spring框架中獲取連線池有幾種方式。當JNDI與DBCP同時存在時,會不會出現問題,如果不能同時存在的話,請說明原因
四種方式,如下:
1:DBCP資料來源
DBCP類包位於 <SPRING_HOME>/lib/jakarta-commons/commons-dbcp.jar,DBCP是一個依賴Jakarta commons-pool物件池機制的資料庫連線池,所以在類路徑下還必須包括<SPRING_HOME>/lib/jakarta-commons/commons-pool.jar。下面是使用DBCP配置oracle資料來源的配置片斷:

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value=" oracle.jdbc.driver.OracleDriver " />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl " />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>

2:C3P0資料來源
C3P0是一個開放原始碼的JDBC資料來源實現專案,它在lib目錄中與Hibernate一起釋出,實現了JDBC3和JDBC2擴充套件規範說明的Connection 和Statement 池。C3P0類包位於<SPRING_HOME>/lib/c3p0/c3p0-0.9.0.4.jar。下面是使用C3P0配置一個Oracle資料來源: 
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClassName"
     value=" oracle.jdbc.driver.OracleDriver " />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl " />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>

3. Spring的資料來源實現類(DriverManagerDataSource)
Spring本身也提供了一個簡單的資料來源實現類DriverManagerDataSource ,它位於org.springframework.jdbc.datasource包中。這個類實現了javax.sql.DataSource介面,但它並沒有提供池化連線的機制,每次呼叫getConnection()獲取新連線時,只是簡單地建立一個新的連線。因此,這個資料來源類比較適合在單元測試或簡單的獨立應用中使用,因為它不需要額外的依賴類。
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName"
     value=" oracle.jdbc.driver.OracleDriver " />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl " />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>

4.獲取JNDI資料來源
如果應用配置在高效能的應用伺服器(如WebLogic或Websphere等)上,我們可能更希望使用應用伺服器本身提供的資料來源。應用伺服器的資料來源使用JNDI開放呼叫者使用,Spring為此專門提供引用JNDI資源的JndiObjectFactoryBean類。下面是一個簡單的配置: 
<bean id="dataSource" 
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/oracle"/>
</bean>
通過jndiName指定引用的JNDI資料來源名稱。

=====================spring配置檔案中id和name的區別======================================

Bean的id屬性是bean的唯一標示符,這個id在管理Bean的BeanFactory或者ApplicationContext中必須是唯一的標示符。而且它不能用特殊字元,不能以數字開頭。

name 可以用特殊字元。如果我們在開發中有必要使用一些非法的字元,那麼我們可以通過name屬性指定一個或多個id。當我們指定多個id時要用逗號(,)或者(;)來進行分隔。如果沒有id,則name的第一個名稱預設是id

=========================spring2.0和spring2.5區別=============================
spring2.0 和spring2.5包的變化
Spring2.5rc1釋出了,一直想知道它葫蘆裡賣什麼藥,以下是文件裡的change.log

1. JDK版本: JDK至少要1.4.2以上,如果仍然打算使用1.3的話就請用2.0.6/2.0.7版本吧。
2. Jar包:SpringMVC 不再使用spring.jar 這個龐大的包了。 Spring-webmvc.jar, spring-webmvc-portlet.jar 可以在 lib/modules 目錄下找到,而且對於Struts1.* 的支援的包也應該改成 spring-webmvc-struts.jar了
3. XML配置:推薦使用XML metadata格式,不過先前的DTD仍然支援。需要注意的一點是,Spring1.2的DTD繼續使用“singleton”屬性,但是新的Spring2.0 DTD不允許使用“singleton”屬性了,改成“scope”屬性來描述bean的生命週期。
4. 廢棄的類與方法:有些在先前版本標註過“@deprecated”的類與方法已經完全被廢棄了。
比如:
   1).ResultReader : 被 RowMapper 介面取代。
   2).BeanFactoryBootstrap : 考慮使用 BeanFactoryLocator 或自定義的bootstrap類來代替。
5. Apache OJB:注意Spring原始碼中已經完全把這個去掉了,但與之整合的類仍然可以在Spring Modules project找到。https://springmodules.dev.java.net/
6. iBATIS:注意Spring已經不再支援iBATIS 的1.3版本了, 如果想繼續的話,請升級到2.3以上吧。
7. Hibernate:注意Spring已經不再支援Hibernate 3.1之前的版本了,也就是說2.1,3.0的版本也無法使用了。如果仍然要用的話,推薦使用Spring的2.0.6/2.0.7版本。
8. JDO:注意Spring已經不支援JDO1.0了。同樣,你可以升級到2.0以上版本,或者使用Spring的2.0.6/2.0.7版本。
9. UrlFilenameViewController:這個東東我也沒有接觸過,這裡,我就簡單翻譯一下吧。“考慮到巢狀路徑的請求,檢視名稱現在決定叫UrlFilenameViewController了,這是一個突破性的改變,並且意味著如果你從Spring1.* 升級到Spring2.0 你可以使用該類從而減少Spring Web MVC的配置工作。”
大家在使用新版本之前請先注意這些改變,也許對您的系統來說,是很重要的。 


IoC是什麼?Inversion of Control,即反轉控制,或許說為依賴注入更為合適。IoC就是IoC,不是什麼技術,與GoF一樣,是一種設計模式。 
Interface Driven Design介面驅動,介面驅動有很多好處,可以提供不同靈活的子類實現,增加程式碼穩定和健壯性等等,但是介面一定是需要實現的,也就是如下語句遲早要執 行:AInterface a = new AInterfaceImp(); 這樣一來,耦合關係就產生了,如: 
Class A{ 
AInterface a; 
A(){} 
aMethod(){ 
a = new AInterfaceImp(); 


ClassA與AInterfaceImp就是依賴關係,如果想使用AInterface的另外一個實現就需要更改程式碼了。當然我們可以建立一個Factory來根據條件生成想要的AInterface的具體實現,即: 
InterfaceImplFactory{ 
AInterface create(Object condition){ 
if(condition = condA){ 
return new AInterfaceImpA(); 
}elseif(condition = condB){ 
return new AInterfaceImpB(); 
}else{ 
return new AInterfaceImp(); 



表 面上是在一定程度上緩解了以上問題,但實質上這種程式碼耦合並沒有改變。通過IoC模式可以徹底解決這種耦合,它把耦合從程式碼中移出去,放到統一的XML文 件中,通過一個容器在需要的時候把這個依賴關係形成,即把需要的介面實現注入到需要它的類中,這可能就是“依賴注入”說法的來源了。 
IOC模式,系統中通過引入實現了IOC模式的IOC容器,即可由IOC容器來管理物件的生命週期、依賴關係等,從而使得應用程式的配置和依賴性規範與實 際的應用程式程式碼分開。其中一個特點就是通過文字的配件檔案進行應用程式元件間相互關係的配置,而不用重新修改並編譯具體的程式碼。 

 

相關文章