Java經典面試題Spring是什麼 Spring框架入門詳解

2020-12-15 很神很奇很神奇

SpringLOGO

Spring是什麼,談談你對Spring的理解。這是初級開發人員必然被問道的問題,如果你不懂Spring你就無法從事這一行業,此處僅限技術人員,公司的繼承人等其他個例不受此限制。那麼Spring是什麼呢,Spring遵循分層的結構思想什麼什麼實現了高內聚低耦合巴拉巴拉一大堆,咬文嚼字不是我的強項,直接開幹,讓你們看看Spring到底是什麼東西。

通過maven下載好Spring的jar包

我們在src下/main/resources下創建配置文件applicationContext.xml 並為其配置xsd約束

把上面這一對約束複製到applicationContext.xml 中然後ctrls+s保存,Spring框架到目前為止已經搭建完畢。配置文件中的根標籤是beans,所以配置一定要寫到beans裡面。到目前為止Sping框架就搭建完畢了。創建下面一個pojo看看spring都有哪些功能

Sping有一個功能就是幫我們創建pojo對象實例,下面我麼需要在applicationContext.xml中將pojo配置為bean,註冊到spring容器中。

bean的name可以隨便取,一會我們會用到,class就是pojo的完整類名。下面請看java代碼

我們通過ClassPathXmlApplicationContext類傳入applicationContext.xml配置文件的相對路徑,創建出spring的容器對象ApplicationContext,在通過容器對象中的方法獲取到Spring容器為我們創建的user對象,其實Spring兩個容器,除了ApplicationContext外還有一個BeanFactory ,那麼他們有什麼區別呢?BeanFactory :是在getBean的時候才會生成類的實例. applicationContext :在加載applicationContext.xml(容器啟動)時候就會創建. BeanFactory 是一種懶加載的方式,那麼當訪問的bean過多的時候伺服器壓力就變大了,所以beanFactory實際上是一種淘汰了的容器,而applicationContext更類似於一種緩存機制,所以它受眾更高,下面看一下列印結果

可以看到User的toString方法已經打出,補充一下以上代碼我並沒有運行在java的main線程裡面,而是使用的junit單元測試。我們在main方法外部隨意創建一個public的方法,在上部使用@Test註解即可運行,這樣能夠幫我們節省在main方法內通過對象調用方法的時間。

以上的就是Spring被外行廣為流傳的,傳說中的IOC的使用,什麼是IOC中文意思就是控制反轉,什麼意思?我們平時創建對象需要自己手動創建,現在對象都是通過spring容器ApplicationContext創建,這就是所謂的IOC控制反轉,如果有了解工廠設計模式的朋友會更容易理解,ApplicationContext此處就相當於一個工廠類。我之前講解MyBatis框架的SqlSession就是由SqlSesionFactory創建的。

接下來我們看一下spring另一個特性,DI依賴注入是什麼。上面Java代碼中的username,userage都是由我手動設置的,但是這樣實在太過於麻煩,於是Spring提供了為對象屬性注入的功能。下面回到剛才xml中的userBean部分

創建property字標籤,name為pojo中需要注入的變量名,value就是需要注入的值,

結果顯示已經注入成功了。那麼spring是否能夠完成我們自定義java對象的注入呢?

新建一個pojo類User2並在User中作為變量引入,

xml中新增一個bean user2,將User2對象交給spring創建,在User的Bean配置user2的引用,property的name還是變量名,這裡的value要換成ref,ref為要引用的對象的bean的name,下面我們看執行結果

它的原理是spring讀到xml中的值調用pojo內部的set方法完成注入的m所以這種方式必須要有set方法。除此之外我們還可以通過構造方法在創建對象的時候為屬性賦值,在xml中使用<constructor-arg></constructor-arg>標籤來實現,也很簡單照葫蘆畫瓢參照上面的配就行。

注意構造函數有幾個參數這裡就要傳入幾個參數,如果你只創建了一個三個參數的構造方法,那你傳2個參數就報錯,沒傳參也報錯,所以必須創建所有參數的構造方法才能讓程序穩定運行,這種注入方式讓人很有負擔。除了構造外,spring還支持p名稱空間注入和spel表達式注入,spel基於set方法和構造方法注入的,所以我們通過圖中的注入方式足矣,也是主流的注入方式。p和spel注入在這裡就不演示了,以上就是spring的DI依賴注入了,下面我們看看如給集合對象注入,

還是先創建一個pojo,然後我們在xml中為集合注入值

如圖所示,如果沒有指定泛型,那麼可以用value傳值,也可以用ref傳對象,可以不指定集合元素的類型,還是比較簡單,下面看看輸出結果

IOC需要DI的支持為什麼呢?因為沒有DI的注入Spring創造出的對象都是空值是無法使用的,所以說IOC和DI多數是同時出現人們眼前的。 下面補充一下Bean元素的屬性

scope是範圍的意思,在絕地求生中scope意為瞄準鏡,如果你的隊友是個老外你就和他說 i want this 4times scope他就明白了。在bean中scope表示bean對象的作用域,有兩個選項singlton,和prototype。什麼意思呢,singlton時spring只會創建單例對象,就是你反覆從容器中取到堆中的同一對象,而prototype則會創建多個對象。

那麼bean的生命周期是什麼呢,我認為通常生命周期這四個字只出現在web層面,所以這裡應該是配置controller的,看它的兩個屬性nit-method="init" 和destroy-method="destory",init是初始化的意思,裡面寫的是pojo的方法名,該方法一定是public的,而destory是銷毀方法,同init一樣用法,那麼他們分別是什麼時候執行的呢?如果使用applicationContext容易,那麼項目啟動時就會執行init方法,銷毀方法想要執行,需要是單例創建的Bean而且在工廠關閉的時候,Bean才會被銷毀. 什麼時候工廠開啟關閉呢?web項目中隨著中間件tommcat啟動,那麼bean的init就會被執行,關閉tommcat時 destory方法就會執行。

最後給大家看一道java面試題,問圖下輸出結果

有的人一看,main方法裡是空的,怎麼輸出啊?原來啊,在我們執行main方法之前,Jvm的classLoader需要將這個類加載到內存,首先加載的就是被static修飾的變量,也就是全局變量。這裡先聲明一個List 集合,然後在堆中創建一個ArrayList的子類對象,大家看這個對象的創建方法是不是與我們平時創建對象的方式是不是不太一樣呢?這個叫做匿名內部類,匿名內部類被創建時會執行它的方法,因為它的匿名內部類,所以和我們平時通過對象調用方法不太一樣,這裡沒有顯示調用它的對象名,但是方法還是被執行了。先對集合添加一個子串,然後列印集合中的內容,那麼列印出來的是什麼呢?結果是null,為什麼呢?因為在內部類的方法執行完成之前,還沒有結束對象的創建,所以聲明NAMES的引用並沒有與堆中任一對象進行連接,此處列印的相當於List<String> NAMES;只完成了前半段語句,所以列印出來的是空的,如果等內部類中方法都結束時,在main中重新列印NAMES的內容才可以看到集合中的元素。這道題主要考察的是Java實例化一個對象在堆棧中的過程。

以上就是今天的內容了,Spring中有著非常多的設計模式的影子,並不想SpringMVC 或MyBatis中有比較深的東西,所以我們只需要會使用spring框架就夠了。

相關焦點

  • Java 第一大框架:Spring 的 IoC 跟 AOP 雛形如何實現?
    SpringSpring make java more simple;Spring make java more modern;Spring make java more reactive;Spring make java more productive;Spring make java more cloud-ready。
  • java retry(重試) spring retry, guava retrying 詳解
    你去看下重試相關的東西重試重試作用對於重試是有場景限制的,不是什麼場景都適合重試,比如參數校驗不合法、寫操作等(要考慮寫是否冪等)都不適合重試。遠程調用超時、網絡突然中斷可以重試。在微服務治理框架中,通常都有自己的重試與超時配置,比如dubbo可以設置retries=1,timeout=500調用失敗只重試1次,超過500ms調用仍未返回則調用失敗。
  • 面試官:你了解spring嗎?spring的兩大核心是什麼?
    IOC(DI) - 控制反轉(依賴注入)所謂的IOC稱之為控制反轉,簡單來說就是將對象的創建的權利及對象的生命周期的管理過程交由Spring框架來處理,從此在開發過程中不再需要關注對象的創建和生命周期的管理,而是在需要時由Spring框架提供,這個由spring框架管理對象創建和生命周期的機制稱之為控制反轉。
  • Java 最常見的 200+ 面試題:面試必備
    聊回面試題這件事,這份面試清單原本是我們公司內部使用的,可到後來有很多朋友在微信上聯繫到我,讓我幫他們找一些面試方面的資料,而且這些關係也不太好拒絕,一呢,是因為這些找我,要面試題的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹們;二呢,我也不能馬馬虎虎的對付,受人之事忠人之命,我也不能辜負這份信任。
  • Java程式設計師必會 springmvc-spring-mybatis框架整合搭建傻瓜教程
    ssm是用於將springmvc-spring-mybatis三個框架整合來進行java開發web項目。本文通過ssm三大框架整合的形式講解springmvc的使用教程,最新的框架版本主流IDE,只要按照圖中步驟能夠保證每個人的框架搭建完成並成功運行。這裡使用maven來構建項目,我們需要創建一個名為ssm的maven項目,打包方式為war包。
  • 2019 最新 200 道 Java 面試題
    ,我做了大量的「功課」,首先我研究了幾乎所有大廠的面試題,還和負責招聘工作的幾個朋友,詳細的探討了 Java 面試所要涉及的知識點,於是就有了今天大家看到的這 200 多道面試題。有了這些面試題不意味著,死記硬背之後就能進入企業工作,尤其是 BAT 等工作崗位競爭更為激烈,這些面試題只能成為面試體系中的一道「開胃菜」,從而提高了整個 Java 面試的壁壘,讓願與學的人,變的更加優秀,從而和懶惰的人拉開差距,讓企業也能更輕易的甄別。這些面試題包含哪些內容?
  • SpringFramework學習筆記
    )面試題什麼是 IOC?面試題如何註冊一個 Spring Bean?通過 BeanDefinition 和外部單體對象來註冊 (SingletonBeanRegistry)什麼是 Spring BeanDefinition?
  • 五分鐘學Java:一篇文章搞懂spring和springMVC
    本文思維導圖什麼是Spring,為什麼你要學習spring?你第一次接觸spring框架是在什麼時候?相信很多人和我一樣,第一次了解spring都不是做項目的時候用到,而是在網上看到或者是聽到過一個叫做spring的框架,這個框架號稱完爆之前的structs和structs2,吸引了不少人的注意。
  • 詳解設計模式在 Spring 中的應用
    (給ImportNew加星標,提高Java技能)轉自:it學習者,作者:螃蟹連結:itxxz.com/a/javashili
  • Spring Batch 入門教程
    1.Spring Batch框架工作原理在深入研究代碼之前,讓我們先看看 SpringBatch框架。它包含以下主要構建塊2.示例概述我們會使用以下工具/框架:SpringBatch4.1SpringBoot2.1Maven3.6我們的項目目錄結構如下:
  • SpringBatch從入門到放棄002- 核心概念1
    Spring -batchSpringBatch從入門到放棄002- 核心概念1上一篇我們通過一個例子簡單介紹了一下 Spring Batch,讓大家有個簡答的概念,今天我們來看 Spring batch 裡面具體的概念。
  • spring security 整合 springboot 入門案例
    序言前面我們學習了 spring security 與 springmvc 的整合入門教程。這一節我們來學習一下 spring security 與 springboot 整合,為了力求簡單,此處不演示資料庫相關操作。
  • 2021-Java後端工程師面試指南-(SpringBoot+SpringCloud)
    然後下面是前面的文章匯總2021-Java後端工程師面試指南-(Java基礎篇)2021-Java後端工程師面試指南-(並發-多線程)2021-Java後端工程師面試指南-(MySQL)2021-Java後端工程師面試指南-(Redis)2021-Java後端工程師面試指南-(Elasticsearch)2021-Java後端工程師面試指南
  • 學java面試會提什麼問題呢?2019年java面試經典100問
    今天就跟著北大青鳥科海校區月月小姐姐帶大家來看看2019年java面試的100個金典面試問題。文章目錄一、java基礎二、資料庫三、SSM框架四、redis五、消息隊列六、spring boot七、spring cloud八、其他一、java基礎1、面向對象的特徵有哪些方面?
  • SpringSecurity + JWT,從入門到精通!
    RBAC 全稱為基於角色的權限控制,本段將會從什麼是 RBAC,模型分類,什麼是權限,用戶組的使用,實例分析等幾個方面闡述 RBAC思維導圖繪製思維導圖如下什麼是 RBACRBAC 全稱為用戶角色權限控制,通過角色關聯用戶,角色關聯權限,這種方式,間階的賦予用戶的權限,如下圖所示
  • Spring Batch 批處理框架技巧
    引入依賴首先我們需要引入對Spring Batch的依賴,在pom.xml文件加入下面的代碼:<dependency>    <groupId>org.springframework.batch</groupId>    <artifactId>spring-batch-core
  • 詳解Spring框架的AOP機制
    ● 理解AOP的編程思想及原理● 掌握AOP的實現技術Spring框架的AOP機制可以讓開發者把業務流程中的通用功能抽取出來,單獨編寫功能代碼。在業務流程執行過程中,Spring框架會根據業務流程要求,自動把獨立編寫的功能代碼切入到流程的合適位置。
  • java面試——SpringMVC面試題集錦
    →[設為星標⭐]♪ 點擊上方綠標 收聽java面試——SpringMVC面試題集錦1、講下SpringMvc的核心入口類是什麼,Struts1,Struts2的分別是什麼SpringMvc4、@RequestMapping註解用在類上面有什麼作用用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
  • JAVA架構師必備詞彙和知識點
    maven私服的搭建及部署maven坐標分析/父控設置02、git版本管理及jenkins自動化構建git使用入門培訓git常用命令分析和使用jenkins環境搭建及插件配置git+jenkins實現自動化構建03、NoSql專題-redis高性能緩存redis使用入門
  • 挑戰全網Java最新面試匯總:Redis+ JVM+ Spring+消息中間+微服務
    不多逼逼,上才藝:消息中間件面試題(RocketMq+ActiveMQ+RocketMq)什麼是 ActiveMQ?ActiveMQ 伺服器宕機怎麼辦?Java多線程面試題什麼是線程安全和線程不安全?什麼是原操作?在Java Concurrency API中有哪些原類(atomic classes)?