1. Spring的體系結(jié)構(gòu)組成步绸?
1. Data Access/Integration(數(shù)據(jù)訪問/集成)
數(shù)據(jù)訪問/集成層包括 JDBC悴晰、ORM趋艘、OXM娇澎、JMS 和 Transactions 模塊笨蚁,具體介紹如下。
JDBC 模塊:提供了一個(gè) JDBC 的抽象層趟庄,大幅度減少了在開發(fā)過程中對(duì)數(shù)據(jù)庫(kù)操作的編碼括细。
ORM 模塊:流行的對(duì)象關(guān)系映射 API,包括 JPA戚啥、JDO奋单、Hibernate和 MyBatis 提供了的集成層。
OXM 模塊:提供了一個(gè)支持對(duì)象/XML 映射的抽象層實(shí)現(xiàn)猫十,如 JAXB览濒、Castor呆盖、XMLBeans、JiBX 和 XStream匾七。
JMS 模塊:指 Java消息服務(wù)絮短,包含的功能為生產(chǎn)和消費(fèi)的信息。
Transactions 事務(wù)模塊:支持編程和聲明式事務(wù)管理實(shí)現(xiàn)特殊接口類昨忆,并為所有的 POJO丁频。
2. Web 模塊
Spring 的 Web 層包括 Web、Servlet
Web 模塊:提供了基本的 Web 開發(fā)集成特性邑贴,例如多文件上傳功能席里、使用的 Servlet 監(jiān)聽器的 IoC 容器初始化以及 Web 應(yīng)用上下文。
Servlet模塊:包括 Spring 模型—視圖—控制器(MVC)實(shí)現(xiàn) Web 應(yīng)用程序拢驾。
Struts 模塊:包含支持類內(nèi)的 Spring 應(yīng)用程序奖磁,集成了經(jīng)典的 Struts Web 層。
Portlet 模塊:提供了在 Portlet 環(huán)境中使用 MV C實(shí)現(xiàn)繁疤,類似 Web-Servlet 模塊的功能咖为。
3. Core Container(核心容器)
Spring 的核心容器是其他模塊建立的基礎(chǔ),由 Beans 模塊稠腊、Core 核心模塊躁染、Context 上下文模塊和 Expression Language 表達(dá)式語言模塊組成,具體介紹如下架忌。
Beans 模塊:提供了 BeanFactory吞彤,是工廠模式的經(jīng)典實(shí)現(xiàn),Spring 將管理對(duì)象稱為 Bean叹放。
Core 核心模塊:提供了 Spring 框架的基本組成部分饰恕,包括 IoC 和 DI 功能。
Context 上下文模塊:建立在核心和 Beans 模塊的基礎(chǔ)之上井仰,它是訪問定義和配置任何對(duì)象的媒介埋嵌。ApplicationContext 接口是上下文模塊的焦點(diǎn)。
Expression Language 模塊:是運(yùn)行時(shí)查詢和操作對(duì)象圖的強(qiáng)大的表達(dá)式語言俱恶。
4. 其他模塊
Spring的其他模塊還有 AOP莉恼、Aspects、Instrumentation 以及 Test 模塊速那,具體介紹如下。
AOP 模塊:提供了面向切面編程實(shí)現(xiàn)尿背,允許定義方法攔截器和切入點(diǎn)端仰,將代碼按照功能進(jìn)行分離,以降低耦合性田藐。
Aspects 模塊:提供與 AspectJ 的集成荔烧,是一個(gè)功能強(qiáng)大且成熟的面向切面編程(AOP)框架吱七。
Instrumentation 模塊:提供了類工具的支持和類加載器的實(shí)現(xiàn),可以在特定的應(yīng)用服務(wù)器中使用鹤竭。
Test 模塊:支持 Spring 組件踊餐,使用 JUnit 或 TestNG 框架的測(cè)試。
2. Spring有哪些優(yōu)勢(shì)臀稚?
1吝岭、非侵入式設(shè)計(jì)
Spring是一種非侵入式(non-invasive)框架,它可以使應(yīng)用程序代碼對(duì)框架的依賴最小化吧寺。
2窜管、方便解耦、簡(jiǎn)化開發(fā)
Spring就是一個(gè)大工廠稚机,可以將所有對(duì)象的創(chuàng)建和依賴關(guān)系的維護(hù)工作都交給Spring容器的管理幕帆,大大的降低了組件之間的耦合性。
3赖条、支持AOP
Spring提供了對(duì)AOP的支持失乾,它允許將一些通用任務(wù),如安全纬乍、事物碱茁、日志等進(jìn)行集中式處理,從而提高了程序的復(fù)用性蕾额。
4早芭、支持聲明式事務(wù)處理
只需要通過配置就可以完成對(duì)事物的管理,而無須手動(dòng)編程诅蝶。
5退个、方便程序的測(cè)試
Spring提供了對(duì)Junit4的支持,可以通過注解方便的測(cè)試Spring程序调炬。
6语盈、方便集成各種優(yōu)秀框架
Spring不排斥各種優(yōu)秀的開源框架,其內(nèi)部提供了對(duì)各種優(yōu)秀框架(如Struts缰泡、Hibernate刀荒、MyBatis、Quartz等)的直接支持棘钞。
7缠借、降低Jave EE API的使用難度。
Spring對(duì)Java EE開發(fā)中非常難用的一些API(如JDBC宜猜、JavaMail等)泼返,都提供了封裝,使這些API應(yīng)用難度大大降低姨拥。
3. RandomAccess 接口的作用是什么绅喉?
RandomAccess接口是一個(gè)標(biāo)志接口渠鸽,ArrayList實(shí)現(xiàn)了RandomAccess接口【一般采用for循環(huán)遍歷】,LinkedList沒有實(shí)現(xiàn)RandomAccess接口【一般采用迭代器遍歷】柴罐,RandomAccess接口的存在徽缚,是為了能夠更好地判斷集合是否ArrayList或者LinkedList,從而能夠更好選擇更優(yōu)的遍歷方式革屠,提高性能