最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Spring面試題(二)

2021-07-03 21:47 作者:zjlala96  | 我要投稿

1、請(qǐng)描述一下 Spring 的事務(wù)

(一)聲明式事務(wù)管理的定義:用在 Spring 配置文件中聲明式的處理事務(wù)來(lái)代替代碼式的處理事務(wù)。這樣的好處是,事務(wù)管理不侵入開(kāi)發(fā)的組件,具體來(lái)說(shuō),業(yè)務(wù)邏輯對(duì)象就不會(huì)意識(shí)到正在事務(wù)管理之中,事實(shí)上也應(yīng)該如此,因?yàn)槭聞?wù)管理是屬于系統(tǒng)層面的服務(wù),而不是業(yè)務(wù)邏輯的一部分,如果想要改變事務(wù)管理策劃的話,也只需要在定義文件中重新配置即可,這樣維護(hù)起來(lái)極其方便。

1)基于 TransactionInterceptor 的聲明式事務(wù)管理:兩個(gè)次要的屬性: transactionManager,用來(lái)指定一個(gè)事務(wù)治 理器,并將具體事務(wù)相 關(guān)的操作請(qǐng)托給它;其 他一個(gè)是 Properties 類(lèi)型的transactionAttributes 屬性,該屬性的每一個(gè)鍵值對(duì)中,鍵指定的是方法名,方法名可以行使通配符,而值就是表現(xiàn)呼應(yīng)方法的所運(yùn)用的事務(wù)屬性。

?<beans...>

<bean id="transactionInterceptor"

?class="org.springframework.transaction.interceptor.TransactionInterceptor">

<property name="transactionManager" ref="transactionManager"/>

?<property name="transactionAttributes">

?<props>

?<prop key="transfer">PROPAGATION_REQUIRED</prop>

? </props>

?</property>

</bean>

?<bean id="bankServiceTarget"

class="footmark.spring.core.tx.declare.origin.BankServiceImpl">

?<property name="bankDao" ref="bankDao"/>

?</bean>

?<bean id="bankService"

class="org.springframework.aop.framework.ProxyFactoryBean">

<property name="target" ref="bankServiceTarget"/>

?<property name="interceptorNames">

<list>

<idref bean="transactionInterceptor"/>

. </list>

?</property>

?</bean>

</beans>

2)基于 TransactionProxyFactoryBean 的聲明式事務(wù)管理:設(shè)置配置文件與先前比照簡(jiǎn)化了許多。我們把這類(lèi)設(shè)置配置文件格式稱為 Spring 經(jīng)典的聲明式事務(wù)治理

<beans......>

<bean id="bankServiceTarget"

?class="footmark.spring.core.tx.declare.classic.BankServiceImpl">

?<property name="bankDao" ref="bankDao"/>

?</bean>

<bean id="bankService"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

<property name="target" ref="bankServiceTarget"/>

<property name="transactionManager" ref="transactionManager"/>

<property name="transactionAttributes">

?<props>

?<prop key="transfer">PROPAGATION_REQUIRED</prop>

?</props>

</property>

?</bean>

3)基于 <tx> 命名空間的聲明式事務(wù)治理:在前兩種方法的基礎(chǔ)上,Spring 2.x 引入了 <tx> 命名空間,連絡(luò)行使 <aop> 命名空間,帶給開(kāi)發(fā)人員設(shè)置配備聲明式事務(wù)的全新體驗(yàn)。

<beans......>

?<bean id="bankService"

?class="footmark.spring.core.tx.declare.namespace.BankServiceImpl">

?<property name="bankDao" ref="bankDao"/>

?</bean>

<tx:advice id="bankAdvice" transaction-manager="transactionManager">

?<tx:attributes>

?<tx:method name="transfer" propagation="REQUIRED"/>

?</tx:attributes>

?</tx:advice>

?<aop:config>

<aop:pointcut id="bankPointcut" expression="execution(* *.transfer(..))"/>

?<aop:advisor advice-ref="bankAdvice" pointcut-ref="bankPointcut"/>

</aop:config>

</beans>

3)基于 @Transactional 的聲明式事務(wù)管理:Spring 2.x 還引入了基于 Annotation 的體式格式,具體次要觸及@Transactional 標(biāo)注。@Transactional 可以浸染于接口、接口方法、類(lèi)和類(lèi)方法上。算作用于類(lèi)上時(shí),該類(lèi)的一切public 方法將都具有該類(lèi)型的事務(wù)屬性。

?@Transactional(propagation = Propagation.REQUIRED)

?public boolean transfer(Long fromId, Long toId, double amount) {

?return bankDao.transfer(fromId, toId, amount);

}

(二)編程式事物管理的定義:在代碼中顯式挪用 beginTransaction()、commit()、rollback()等事務(wù)治理相關(guān)的方法,這就是編程式事務(wù)管理。Spring 對(duì)事物的編程式管理有基于底層 1)API 的編程式管理和基于 TransactionTemplate 的編程式事務(wù)管理兩種方式。

基 于 底 層 API 的 編 程 式 管 理 : 憑 證 PlatformTransactionManager 、 TransactionDefinition 和TransactionStatus 三個(gè)焦點(diǎn)接口,來(lái)實(shí)現(xiàn)編程式事務(wù)管理。

Public class BankServiceImpl implements BancService{

Private BanckDao bankDao;

private TransactionDefinition txDefinition;

?private PlatformTransactionManager txManager;

?public boolean transfer(Long fromId, Long toId, double amount) {

?TransactionStatus txStatus = txManager.getTransaction(txDefinition);

?boolean result = false;

?try {

?result = bankDao.transfer(fromId, toId, amount);

?txManager.commit(txStatus);

} catch (Exception e) {

?result = false;

?txManager.rollback(txStatus);

System.out.println("Transfer Error!");

?}

?return result;

}

}

2)基于 TransactionTemplate 的編程式事務(wù)管理:為了不損壞代碼原有的條理性,避免出現(xiàn)每一個(gè)方法中都包括相同的啟動(dòng)事物、提交、回滾事物樣板代碼的現(xiàn)象,spring 提供了 transactionTemplate 模板來(lái)實(shí)現(xiàn)編程式事務(wù)管理。

public class BankServiceImpl implements BankService {

private BankDao bankDao;

?private TransactionTemplate transactionTemplate;.

?public boolean transfer(final Long fromId, final Long toId, final double amount) {

return (Boolean) transactionTemplate.execute(new TransactionCallback(){

?public Object doInTransaction(TransactionStatus status) {

Object result;

?try {

result = bankDao.transfer(fromId, toId, amount);

} catch (Exception e) {

status.setRollbackOnly();

result = false;

System.out.println("Transfer Error!");

?}

return result;

}

?});

}

?}

2、BeanFactory 常用的實(shí)現(xiàn)類(lèi)有哪些?

Bean 工廠是工廠模式的一個(gè)實(shí)現(xiàn),提供了控制反轉(zhuǎn)功能,用來(lái)把應(yīng)用的配置和依賴從正真的應(yīng)用代碼中分離。常用的 BeanFactory 實(shí)現(xiàn)有DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等。XMLBeanFactory,最常用的就是 org.springframework.beans.factory.xml.XmlBeanFactory ,它根據(jù) XML 文件中的定義加載 beans。該容器從 XML 文件讀取配置元數(shù)據(jù)并用它去創(chuàng)建一個(gè)完全配置的系統(tǒng)或應(yīng)用。

3、解釋 Spring JDBC、Spring DAO 和 Spring ORM

1)Spring-DAO 并非 Spring 的一個(gè)模塊,它實(shí)際上是指示你寫(xiě) DAO 操作、寫(xiě)好 DAO 操作的一些規(guī)范。因此,對(duì)于訪問(wèn)你的數(shù)據(jù)它既沒(méi)有提供接口也沒(méi)有提供實(shí)現(xiàn)更沒(méi)有提供模板。在寫(xiě)一個(gè) DAO 的時(shí)候,你應(yīng)該使用 @Repository 對(duì)其進(jìn)行注解,這樣底層技術(shù)(JDBC,Hibernate,JPA,等等)的相關(guān)異常才能一致性地翻譯為相應(yīng)的 DataAccessException 子類(lèi)。

2)Spring-JDBC 提供了 Jdbc 模板類(lèi),它移除了連接代碼以幫你專(zhuān)注于 SQL 查詢和相關(guān)參數(shù)。Spring-JDBC 還提供了一個(gè) JdbcDaoSupport,這樣你可以對(duì)你的 DAO 進(jìn)行擴(kuò)展開(kāi)發(fā)。它主要定義了兩個(gè)屬性:一個(gè) DataSource 和一個(gè) JdbcTemplate,它們都可以用來(lái)實(shí)現(xiàn) DAO 方法。JdbcDaoSupport 還提供了一個(gè)將 SQL 異常轉(zhuǎn)換為Spring DataAccessExceptions 的異常翻譯器。

3)Spring-ORM 是一個(gè)囊括了很多持久層技術(shù)(JPA,JDO,Hibernate,iBatis)的總括模塊。對(duì)于這些技術(shù)中的每一個(gè),Spring 都提供了集成類(lèi),這樣每一種技術(shù)都能夠在遵循 Spring 的配置原則下進(jìn)行使用,并平穩(wěn)地和 Spring 事務(wù)管理進(jìn)行集成。對(duì)于每一種技術(shù) , 配 置 主 要 在 于 將 一 個(gè) DataSource bean 注入到某種 SessionFactory 或 者 EntityManagerFactory 等 bean 中。純 JDBC 不需要這樣的一個(gè)集成類(lèi)(JdbcTemplate 除外),因?yàn)?JDBC 僅依賴于一個(gè) DataSource。

4、簡(jiǎn)單介紹一下 Spring WEB 模塊。

Spring 的 WEB 模塊是構(gòu)建在 Application context 模塊基礎(chǔ)之上,提供一個(gè)適合 web 應(yīng)用的上下文。這個(gè)模塊也包括支持多種面向 web 的任務(wù),如透明地處理多個(gè)文件上傳請(qǐng)求和程序級(jí)請(qǐng)求參數(shù)的綁定到你的業(yè)務(wù)對(duì)象。它也有對(duì) Jakarta Struts 的支持。

5、Spring 配置文件有什么作用?

Spring 配置文件是個(gè) XML 文件,這個(gè)文件包含了類(lèi)信息,描述了如何配置它們,以及如何相互調(diào)用。

6、什么是 Spring IOC 容器?

IOC 控制反轉(zhuǎn):Spring IOC 負(fù)責(zé)創(chuàng)建對(duì)象,管理對(duì)象。通過(guò)依賴注入(DI),裝配對(duì)象,配置對(duì)象,并且管理這些對(duì)象的整個(gè)生命周期。

7、IOC 的優(yōu)點(diǎn)是什么?

IOC 或 依賴注入把應(yīng)用的代碼量降到最低。它使應(yīng)用容易測(cè)試,單元測(cè)試不再需要單例和 JNDI 查找機(jī)制。最小的代價(jià)和最小的侵入性使松散耦合得以實(shí)現(xiàn)。IOC 容器支持加載服務(wù)時(shí)的餓漢式初始化和懶加載。

8、ApplicationContext 的實(shí)現(xiàn)類(lèi)有哪些?

FileSystemXmlApplicationContext :此容器從一個(gè) XML 文件中加載 beans 的定義,XML Bean 配置文件的全路徑名必須提供給它的構(gòu)造函數(shù)。

ClassPathXmlApplicationContext:此容器也從一個(gè) XML 文件中加載 beans 的定義,這里,你需要正確設(shè)置classpath 因?yàn)檫@個(gè)容器將在 classpath 里找 bean 配置。

WebXmlApplicationContext:此容器加載一個(gè) XML 文件,此文件定義了一個(gè) WEB 應(yīng)用的所有bean。

9、BeanFactory 與 AppliacationContext 有什么區(qū)別?

1. BeanFactory

基礎(chǔ)類(lèi)型的 IOC 容器,提供完整的 IOC 服務(wù)支持。如果沒(méi)有特殊指定,默認(rèn)采用延遲初始化策略。相對(duì)來(lái)說(shuō),容器啟動(dòng)初期速度較快,所需資源有限。

2.ApplicationContext

ApplicationContext 是在 BeanFactory 的基礎(chǔ)上構(gòu)建,是相對(duì)比較高級(jí)的容器實(shí)現(xiàn),除了 BeanFactory 的所有支持外,ApplicationContext 還提供了事件發(fā)布、國(guó)際化支持等功能。ApplicationContext 管理的對(duì)象,在容器啟動(dòng)后默認(rèn)全部初始化并且綁定完成。

更多面試題可關(guān)注"demo鎖屏面試題"公眾號(hào)通過(guò)小程序或App學(xué)習(xí)面試題?


掃碼關(guān)注


Spring面試題(二)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
文登市| 莱芜市| 皮山县| 昔阳县| 鸡西市| 宁武县| 临夏县| 吉水县| 罗田县| 嘉义市| 大兴区| 西乌| 铜梁县| 泌阳县| 津市市| 峨边| 凤庆县| 华亭县| 绍兴县| 绥棱县| 夏邑县| 鱼台县| 渭源县| 新泰市| 新津县| 万年县| 泗阳县| 保定市| 许昌市| 镇雄县| 屯留县| 澄迈县| 加查县| 永仁县| 蓝山县| 日喀则市| 麻栗坡县| 武山县| 周宁县| 锡林浩特市| 洞口县|