Spring框架分為哪七大模組
Spring框架的七大模組
1. Spring Core:
Core封裝包是框架的最基礎部分,提供IOC和依賴注入特性。這裡的基礎概念是BeanFactory,它提供對Factory模式的經典實現來消除對程式性單例模式的需要,並真正地允許你從程式邏輯中分離出依賴關係和配置。
2.Spring Context:
構建於Core封裝包基礎上的 Context封裝包,提供了一種框架式的物件訪問方法,有些象JNDI註冊器。Context封裝包的特性得自於Beans封裝包,並添加了對國際化(I18N)的支援(例如資源繫結),事件傳播,資源裝載的方式和Context的透明建立,比如說通過Servlet容器。
3.Spring DAO:
DAO (Data Access Object)提供了JDBC的抽象層,它可消除冗長的JDBC編碼和解析資料庫廠商特有的錯誤程式碼。 並且,JDBC封裝包還提供了一種比程式設計性更好的宣告性事務管理方法,不僅僅是實現了特定介面,而且對所有的POJOs(plain old Java objects)都適用。
4.Spring ORM:
ORM 封裝包提供了常用的“物件/關係”對映APIs的整合層。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封裝包,可以混合使用所有Spring提供的特性進行“物件/關係”對映,如前邊提到的簡單宣告性事務管理。
5.Spring AOP:
Spring的 AOP 封裝包提供了符合AOP Alliance規範的面向方面的程式設計實現,讓你可以定義,例如方法攔截器(method-interceptors)和切點(pointcuts),從邏輯上講,從而減弱程式碼的功能耦合,清晰的被分離開。而且,利用source-level的元資料功能,還可以將各種行為資訊合併到你的程式碼中。
6.Spring Web:
Spring中的 Web 包提供了基礎的針對Web開發的整合特性,例如多方檔案上傳,利用Servlet listeners進行IOC容器初始化和針對Web的ApplicationContext。當與WebWork或Struts一起使用Spring時,這個包使Spring可與其他框架結合。
7.Spring Web MVC:
Spring中的MVC封裝包提供了Web應用的Model-View-Controller(MVC)實現。Spring的MVC框架並不是僅僅提供一種傳統的實現,它提供了一種清晰的分離模型,在領域模型程式碼和Web Form之間。並且,還可以藉助Spring框架的其他特性。
Spring框架中的三大核心思想是什麼
DI(依賴注入),IOC(控制反轉),AOP(面向切面程式設計)
IOC的概念以及在Spring容器中如何進行IOC的操作。
IOC:Inversion of Control,控制反轉。在Java開發中,IOC意味著將你設計好的類交給系統去控這裡寫程式碼片
制,而不是在你的類內部控制,這稱為控制反轉,就是被呼叫類的例項由原先的呼叫類控制建立、銷燬現在轉變成由Spring的容器管理。
Spring容器是如何管理Bean的生命週期的(如Bean的初始化方法,Bean的銷燬方法)
建立:
<property name=”userDao” ref=”被引用bean的名稱” />
<property name=”username” value = “字串”/>
在Spring框架中獲取連線池有幾種方式。
當JNDI與DBCP同時存在時,會不會出現問題,如果不能同時存在的話,請說明原因
四種方式,如下:
1:DBCP資料來源
DBCP類包位於 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一個依賴Jakarta commons-pool物件池機制的資料庫連線池,所以在類路徑下還必須包括/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類包位於/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的JDBCTemplate操作資料時,必須要往模板中注入哪些物件,同時模板要不要手動關閉資料庫連線
注入DataSource資料來源物件
不要手動關閉資料庫連線,JdbcTemplate會幫我們關閉資料庫連線
JdbcTemplate的QueryForList方法得到List集合,請問List集合中每一個物件為什麼資料型別,在JSP頁面使用EL表示式如何取值。
每一個物件為java.util.Map型別的資料,EL表示式裡用取值
AOP的概念以及使用AOP機制有什麼好處。Java程式設計中實現AOP有幾種方式
AOP的概念是Aspected Oriented Programming 面身向方面程式設計。
好處:AOP將程式分解成各個方面或者說關注點。這使得可以模組化,相當橫向上分切了。它可以解決OOP和過程化方法不能夠很好解決的橫切(crosscut)問題,如:事務、安全、日誌等橫切關注
實現AOP有幾種方式:
Spring 1.2版本中通過ProxyFactoryBean來實現aop,即通過動態代理來實現的,Aspect必須繼承MethodBeforeAdvice,MethodAfterAdvice等
Spring 2.0 AOP需要改的是FBI 這個類,而且它也不需要再實現某些介面
三使用標註(@AspectJ)實現AOP
Spring框架中的事務處理有幾種。請分別闡述兩者的區別
spring提供的事務管理可以分為兩類:程式設計式的和宣告式的。
程式設計式的,比較靈活,但是程式碼量大,存在重複的程式碼比較多;
宣告式的比程式設計式的更靈活.
程式設計式事務的總介面是什麼?使用程式設計式事務需要用到哪幾個Spring事務的核心類物件
總介面
PlatformTransactionManager介面,
核心類:
TransactionDefinition //事務屬性定義
TranscationStatus //代表了當前的事務,可以提交,回滾。
PlatformTransactionManager核心介面的子類
Spring的宣告式事務能不能為普通的類產生代理介面,能不能在程式碼中使用Try/Catch能捕獲異常,如果不可以,請說明原因
不能。Spring的宣告式事務為實現類產生代理。不能在程式碼中使用Try/Catch,因為程式碼中捕獲了異常,Spring容器捕獲不了異常。
使用TransactionProxyFactoryBean為Bean產生事務物理時,需要哪幾個屬性值的設定:
<bean name=”baseTransactionProxy”
class=”org.springframework.transaction.interceptor.TransactionProxyFactoryBean”>
⑴<!– 為事務代理bean注入事務管理器–>
<property name=”transactionManager” ref=”transactionManager”>
</property>
⑵<!– 設定事務屬性–>
<property name=”transactionAttributes”>
<props>
⑶<!– 所有方法採用required的事務策略 ->
<prop key=”*”>PROPAGATION_REQUIRED</prop>
</props>
</property>
⑷<!– 為事務代理bean設定目標bean –>
<property name=”target” ref=”userDao”>
</property>
</bean>
⑸<!– 目標bean –>
<bean name=”userDao” class=”com.dao.userDao”>
<property name=”dataSource” ref=”dataSource” /></property>
</bean>