1. 程式人生 > >Spring框架分為哪七大模組

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有幾種方式:

  1. Spring 1.2版本中通過ProxyFactoryBean來實現aop,即通過動態代理來實現的,Aspect必須繼承MethodBeforeAdvice,MethodAfterAdvice等

  2. Spring 2.0 AOP需要改的是FBI 這個類,而且它也不需要再實現某些介面

  3. 三使用標註(@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>