国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java面試題 java最新面試題之Spring框架部分

java最新面試題之Spring框架部分

Nov 09, 2019 pm 03:05 PM
java

java最新面試題之Spring框架部分

1、SpringMVC的工作原理?

用戶向服務器發(fā)送請求,請求被springMVC前端控制器DispatchServlet捕獲;

DispatcherServle對請求URL進行解析,得到請求資源標識符(URL),然后根據(jù)該URL調(diào)用HandlerMapping將請求映射到處理器HandlerExcutionChain;

DispatchServlet根據(jù)獲得Handler選擇一個合適的HandlerAdapter適配器處理;

Handler對數(shù)據(jù)處理完成以后將返回一個ModelAndView對象給DisPatchServlet;

Handler返回的ModelAndView只是一個邏輯視圖并不是一個正式的視圖,DispatcherSevlet通過ViewResolver試圖解析器將邏輯視圖轉(zhuǎn)化為真正的視圖View;

DispatcherServle通過model解析出ModelAndView()中的參數(shù)進行解析最終展現(xiàn)出完整的view并返回給客戶端;

java-22.png

2、SpringMVC常用注解都有哪些?

@RequestMapping用于請求url映射。

@RequestBody注解實現(xiàn)接收http請求的json數(shù)據(jù),將json數(shù)據(jù)轉(zhuǎn)換為java對象。

@ResponseBody注解實現(xiàn)將controller方法返回對象轉(zhuǎn)化為json響應給客戶。

3、如何開啟注解處理器和適配器?

我們在項目中一般會在springmvc.xml中通過開啟 來實現(xiàn)注解處理器和適配器的開啟。

4、如何解決get和post亂碼問題?

解決post請求亂碼:我們可以在web.xml里邊配置一個CharacterEncodingFilter過濾器。設置為utf-8.解決get請求的亂碼:有兩種方法。對于get請求中文參數(shù)出現(xiàn)亂碼解決方法有兩個:

修改tomcat配置文件添加編碼與工程編碼一致。

另 外 一 種 方 法 對 參 數(shù) 進 行 重 新 編 碼 String userName = new String(request.getParameter(“userName”).getBytes(“ISO8859-1”),“utf-8”);

5、談談你對Spring的理解?

Spring是一個開源框架,為簡化企業(yè)級應用開發(fā)而生。Spring可以是使簡單的JavaBean實現(xiàn)以前只有EJB才能實現(xiàn)的功能。Spring是一個IOC和AOP容器框架。

Spring容器的主要核心是:

控制反轉(zhuǎn)(IOC),傳統(tǒng)的java開發(fā)模式中,當需要一個對象時,我們會自己使用new或者getInstance等直接或者間接調(diào)用構(gòu)造方法創(chuàng)建一個對象。而在spring開發(fā)模式中,spring容器使用了工廠模式為我們創(chuàng)建了所需要的對象,不需要我們自己創(chuàng)建了,直接調(diào)用spring提供的對象就可以了,這是控制反轉(zhuǎn)的思想。

依賴注入(DI),spring使用JavaBean對象的set方法或者帶參數(shù)的構(gòu)造方法為我們在創(chuàng)建所需對象時將其屬性自動設置所需要的值的過程,就是依賴注入的思想。

面向切面編程(AOP),在面向?qū)ο缶幊蹋╫op)思想中,我們將事物縱向抽成一個個的對象。而在面向切面編程中,我們將一個個的對象某些類似的方面橫向抽成一個切面,對這個切面進行一些如權(quán)限控制、事物管理,記錄日志等公用操作處理的過程就是面向切面編程的思想。AOP底層是動態(tài)代理,如果是接口采用JDK動態(tài)代理,如果是類采用CGLIB方式實現(xiàn)動態(tài)代理

6、Spring中的設計模式有哪些?

單例模式——spring中兩種代理方式,若目標對象實現(xiàn)了若干接口,spring使用jdk的java.lang.reflect.Proxy類代理。若目標兌現(xiàn)沒有實現(xiàn)任何接口,spring使用CGLIB庫生成目標類的子類。單例模式——在spring的配置文件中設置bean默認為單例模式。

模板方式模式——用來解決代碼重復的問題。比如:RestTemplate、JmsTemplate、JpaTemplate

前端控制器模式——spring提供了前端控制器DispatherServlet來對請求進行分發(fā)。

試圖幫助(viewhelper)——spring提供了一系列的JSP標簽,高效宏來幫助將分散的代碼整合在試圖中。

依賴注入——貫穿于BeanFactory/ApplacationContext接口的核心理念。

工廠模式——在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用同一個接口來指向新創(chuàng)建的對象。Spring中使用beanFactory來創(chuàng)建對象的實例。

7、Spring的常用注解?

Spring在2.5版本以后開始支持注解的方式來配置依賴注入??梢杂米⒔獾姆绞絹泶鎥ml中bean的描述。注解注入將會被容器在XML注入之前被處理,所以后者會覆蓋掉前者對于同一個屬性的處理結(jié)果。

注解裝配在spring中默認是關閉的。所以需要在spring的核心配置文件中配置一下才能使用基于注解的裝配模式。配置方式如下:

常用的注解:

@Required:該注解應用于設值方法。

@Autowired:該注解應用于有值設值方法、非設值方法、構(gòu)造方法和變量。

@Qualifier:該注解和@Autowired搭配使用,用于消除特定bean自動裝配的歧義。

8、簡單介紹一下spring bean的生命周期?

bean定義:在配置文件里面用 來進行定義。

bean初始化:有兩種方式初始化: 在配置文件中通過指定init-method屬性來完成。 實現(xiàn)org.springframwork.beans.factory.InitializingBean接口。

bean調(diào)用:有三種方式可以得到bean實例,并進行調(diào)用

bean銷毀:銷毀有兩種方式: 使用配置文件指定的destroy-method屬性。 實現(xiàn)org.springframwork.bean.factory.DisposeableBean。

9、Spring結(jié)構(gòu)圖了解嗎?

核心容器:包括Core、Beans、Context、EL模塊。 Core模塊:封裝了框架依賴的最底層部分,包括資源訪問、類型轉(zhuǎn)換及一些常用工具類。?

Beans模塊:提供了框架的基礎部分,包括反轉(zhuǎn)控制和依賴注入。其中BeanFactory是容器核心,本質(zhì)是“工廠設計模式”的實現(xiàn),而且無需編程實現(xiàn)“單例設計模式”,單例完全由容器控制,而且提倡面向接口編程,而非面向?qū)崿F(xiàn)編程;所有應用程序?qū)ο蠹皩ο箝g關系由框架管理,從而真正把你從程序邏輯中把維護對象之間的依賴關系提取出來,所有這些依賴關系都由BeanFactory來維護。?

Context模塊:以Core和Beans為基礎,集成Beans模塊功能并添加資源綁定、數(shù)據(jù)驗證、國際化、JavaEE支持、容器生命周期、事件傳播等;核心接口是ApplicationContext。

?EL模塊:提供強大的表達式語言支持,支持訪問和修改屬性值,方法調(diào)用,支持訪問及修改數(shù)組、容器和索引器,命名變量,支持算數(shù)和邏輯運算,支持從Spring容器獲取Bean,它也支持列表投影、選擇和一般的列表聚合等。

AOP、Aspects模塊: AOP模塊:SpringAOP模塊提供了符合AOPAlliance規(guī)范的面向方面的編程(aspect-orientedprogramming)實現(xiàn),提供比如日志記錄、權(quán)限控制、性能統(tǒng)計等通用功能和業(yè)務邏輯分離的技術(shù),并且能動態(tài)的把這些功能添加到需要的代碼中;這樣各專其職,降低業(yè)務邏輯和通用功能的耦合。

?Aspects模塊:提供了對AspectJ的集成,AspectJ提供了比SpringASP更強大的功能。數(shù)據(jù)訪問/集成模塊:該模塊包括了JDBC、ORM、OXM、JMS和事務管理。?

事務模塊:該模塊用于Spring管理事務,只要是Spring管理對象都能得到Spring管理事務的好處,無需在代碼中進行事務控制了,而且支持編程和聲明性的事務管理。?

JDBC模塊:提供了一個JBDC的樣例模板,使用這些模板能消除傳統(tǒng)冗長的JDBC編碼還有必須的事務控制,而且能享受到Spring管理事務的好處。?

ORM模塊:提供與流行的“對象-關系”映射框架的無縫集成,包括Hibernate、JPA、MyBatis等。而且可以使用Spring事務管理,無需額外控制事務。?

OXM模塊:提供了一個對Object/XML映射實現(xiàn),將java對象映射成XML數(shù)據(jù),或者將XML數(shù)據(jù)映射成java對象,Object/XML映射實現(xiàn)包括JAXB、Castor、XMLBeans和XStream。?

JMS模塊:用于JMS(JavaMessagingService),提供一套“消息生產(chǎn)者、消息消費者”模板用于更加簡單的使用JMS,JMS用于用于在兩個應用程序之間,或分布式系統(tǒng)中發(fā)送消息,進行異步通信。 Web/Remoting模塊:Web/Remoting模塊包含了Web、Web-Servlet、Web-Struts、Web-Porlet模塊。?

Web模塊:提供了基礎的web功能。例如多文件上傳、集成IoC容器、遠程過程訪問(RMI、Hessian、Burlap)以及WebService支持,并提供一個RestTemplate類來提供方便的Restfulservices訪問。

Web-Servlet模塊:提供了一個SpringMVCWeb框架實現(xiàn)。SpringMVC框架提供了基于注解的請求資源注入、更簡單的數(shù)據(jù)綁定、數(shù)據(jù)驗證等及一套非常易用的JSP標簽,完全無縫與Spring其他技術(shù)協(xié)作。?

Web-Struts模塊:提供了與Struts無縫集成,Struts1.x和Struts2.x都支持 Test模塊:Spring支持Junit和TestNG測試框架,而且還額外提供了一些基于Spring的測試功能,比如在測試Web框架時,模擬Http請求的功能。

java-23.png

10、Spring能幫我們做什么?

Spring能幫我們根據(jù)配置文件創(chuàng)建及組裝對象之間的依賴關系。

Spring根據(jù)配置文件來進行創(chuàng)建及組裝對象間依賴關系,只需要改配置文件即可

Spring面向切面編程能幫助我們無耦合的實現(xiàn)日志記錄,性能統(tǒng)計,安全控制。

Spring面向切面編程能提供一種更好的方式來完成,一般通過配置方式,而且不需要在現(xiàn)有代碼中添加任何額外代碼,現(xiàn)有代碼專注業(yè)務邏輯。

Spring能非常簡單的幫我們管理數(shù)據(jù)庫事務。

采用Spring,我們只需獲取連接,執(zhí)行SQL,其他事物相關的都交給Spring來管理了。

Spring還能與第三方數(shù)據(jù)庫訪問框架(如Hibernate、JPA)無縫集成,而且自己也提供了一套JDBC訪問模板,來方便數(shù)據(jù)庫訪問。

Spring還能與第三方Web(如Struts、JSF)框架無縫集成,而且自己也提供了一套SpringMVC框架,來方便web層搭建。

Spring能方便的與JavaEE(如JavaMail、任務調(diào)度)整合,與更多技術(shù)整合(比如緩存框架)。

11、請描述一下Spring的事務?

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

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

<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>

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

<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>
</beans>

基于命名空間的聲明式事務治理:在前兩種方法的基礎上,Spring 2.x 引入了 命名空間, 連絡行使 命名空間,帶給開發(fā)人員設置配備聲明式事務的全新體驗。

<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>

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

@Transactional(propagation = Propagation.REQUIRED)
public boolean transfer(Long fromId, Long toId, double amount) {
    return bankDao.transfer(fromId, toId, amount);
}

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

基 于 底 層 API 的 編 程 式 管 理 : 憑 證 PlatformTransactionManager 、 TransactionDefinition 和TransactionStatus 三個焦點接口,來實現(xiàn)編程式事務管理。

public class BankServiceImpl implements BankService {
    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;
    }
}

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

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;
            }
        });
    }
}

編程式事務與聲明式事務的區(qū)別:

編程式事務是自己寫事務處理的類,然后調(diào)用。

聲明式事務是在配置文件中配置,一般搭配在框架里面使用。

以上是java最新面試題之Spring框架部分的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務,必須先關閉自動提交模式,再執(zhí)行多個操作,最后根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務;2.執(zhí)行多個SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時應使用try-with-resources管理資源,妥善處理異常并關閉連接,避免連接泄漏;此外建議使用連接池、設置保存點實現(xiàn)部分回滾,并保持事務盡可能短以提升性能。

了解Java虛擬機(JVM)內(nèi)部 了解Java虛擬機(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日歷? 如何使用Java的日歷? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當前日期時間;3.使用of()方法創(chuàng)建特定日期時間;4.利用plus/minus方法不可變地增減時間;5.使用ZonedDateTime和ZoneId處理時區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動管理內(nèi)存的機制,通過回收不可達對象釋放堆內(nèi)存,減少內(nèi)存泄漏風險。1.GC從根對象(如棧變量、活動線程、靜態(tài)字段等)出發(fā)判斷對象可達性,無法到達的對象被標記為垃圾。2.基于標記-清除算法,標記所有可達對象,清除未標記對象。3.采用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時較長的MajorGC;Metaspace存儲類元數(shù)據(jù)。4.JVM提供多種GC器:SerialGC適用于小型應用;ParallelGC提升吞吐量;CMS降

了解網(wǎng)絡端口和防火墻 了解網(wǎng)絡端口和防火墻 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

以身作則,解釋說明 以身作則,解釋說明 Aug 02, 2025 am 06:26 AM

defer用于在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時立即求值,函數(shù)按后進先出(LIFO)順序執(zhí)行;1.多個defer按聲明逆序執(zhí)行;2.常用于文件關閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會執(zhí)行,適合用于recover;5.避免在循環(huán)中濫用defer,防止資源泄漏;正確使用可提升代碼安全性和可讀性。

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

See all articles