欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

吊打Java面試官!整理了一周的Spring面試大全(附答案)

 更新時(shí)間:2021年08月17日 16:20:08   作者:我是springmeng  
這篇文章主要介紹了Spring面試資料(附答案)建議收藏留存,學(xué)Java的小伙伴都知道Spring是面試的必問環(huán)節(jié),看完了一天就可掌握數(shù)據(jù)結(jié)構(gòu)和算法的面試題,快來看看吧

對(duì)于Java的小伙伴來說,Spring是面試的必問環(huán)節(jié),我研究Spring多年,甚至我的網(wǎng)名都叫SpringMeng。

最新整理的數(shù)據(jù)結(jié)構(gòu)和算法的值得收藏:

小孟肝了一周,繼續(xù)給大家整理Spring的系列,幫你offer收到手疼。先看下Spring的家族圖:

廢話不多話,直接上干貨。

Q1:什 么 是 spring?

Sring是個(gè)java企業(yè)級(jí)應(yīng)用的開源開發(fā)框架 。Spring主要用來開發(fā) Java應(yīng)用,但是有些擴(kuò)展是針 對(duì)構(gòu)建J2EE 平臺(tái)的web應(yīng)用 。Spring 框 架目標(biāo)是簡(jiǎn)化Java企業(yè)級(jí)應(yīng)用開發(fā),并通過 POJO為基 礎(chǔ)的編程模型促進(jìn)良好的編程習(xí)慣 。

Q2:使 用 Spring 框 架 的 好 處 是 什 么 ?

  • 輕量:Spring 是輕量的,基本的版本大約2MB
  • 控制反轉(zhuǎn) :Spring 通過控制反轉(zhuǎn)實(shí)現(xiàn)了松散耦合 ,對(duì)象們給出它們的依 賴 ,而不是創(chuàng)建或查找依賴的對(duì)象們 。面向切面的編程(AOP):Spring 支持面向切面的編程 ,并且把應(yīng)用業(yè)務(wù)邏輯和系統(tǒng)服務(wù)分開。容器 :Spring 包含并管理應(yīng)用中對(duì)象的生命周期和配置 。

Dependency Injection(DI) 方法使得構(gòu)造器和 JavaBean properties 文件中的依賴關(guān)系一目了然。

與 EJB 容器相比較,IoC 容器更加趨向于輕量級(jí)。這樣一來IoC 容器在有限的內(nèi)存和 CPU 資源的情況下進(jìn)行應(yīng)用程序的開發(fā)和發(fā)布就變得十分有利。

Spring的高度可開放性,并不強(qiáng)制依賴于Spring,開發(fā)者可以自由選擇Spring部分或全部。

  • MVC框架:Spring 的 WEB 框 架 是個(gè)精心設(shè)計(jì)的框架,是 Web 框架的一個(gè)很好的替代品。
  • 事務(wù)管理 :Spring 提供一個(gè)持 續(xù)的事務(wù)管理接口,可以擴(kuò)展到上至本地事務(wù)下至全局事務(wù)(JTA) 。
  • 異常處理 :Spring 提供方便的 API把具體技術(shù)相關(guān)的異常(比如由JDBC,Hibernate or JDO拋出的) 轉(zhuǎn)化為一致的unchecked異常。

Q3:使 用 Spring 缺點(diǎn)是什么?

1,缺少一個(gè)公用控制器;

2,沒有SpringBoot好用;

3,Spring像一個(gè)膠水,將框架黏在一起,后面拆分的話就不容易拆分了。

總結(jié)下Spring的優(yōu)點(diǎn)和缺點(diǎn)。

Q4:IoC 是什么?

IoC即控制反轉(zhuǎn),簡(jiǎn)單來說就是把原來代碼⾥需要實(shí)現(xiàn)的對(duì)象創(chuàng)建、依賴反轉(zhuǎn)給容器來幫忙實(shí)現(xiàn),需要?jiǎng)?chuàng)建⼀個(gè)容器并且需要⼀種描述讓容器知道要?jiǎng)?chuàng)建的對(duì)象間的關(guān)系,在 Spring 中管理對(duì)象及其依賴關(guān)系是通過 Spring 的 IoC 容器實(shí)現(xiàn)的。

IoC 的實(shí)現(xiàn)方式有依賴注⼊和依賴查找,由于依賴查找使⽤的很少,因此 IoC 也叫做依賴注⼊。

依賴注入具體怎么實(shí)現(xiàn)的呢?

依賴注⼊指對(duì)象被動(dòng)地接受依賴類⽽不用自己主動(dòng)去找,對(duì)象不是從容器中查找它依賴的類,而是在容器實(shí)例化對(duì)象時(shí)主動(dòng)將它依賴的類注入給它。假設(shè)⼀個(gè) Car 類需要⼀個(gè) Engine 的對(duì)象,那么⼀般需要手動(dòng) new一個(gè) Engine,利用 IoC 就只需要定義⼀個(gè)私有的 Engine 類型的成員變量,容器會(huì)在運(yùn)行時(shí)自動(dòng)創(chuàng)建⼀個(gè) Engine 的實(shí)例對(duì)象并將引用自動(dòng)注⼊給成員變量。

Q5:IOC的優(yōu)點(diǎn)是什么

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

Q6:IoC 容器初始化過程?

基于 XML 的容器初始化,當(dāng)創(chuàng)建⼀個(gè) ClassPathXmlApplicationContext 時(shí),構(gòu)造方法做了兩件事:

① 調(diào)用父容器的構(gòu)造方法為容器設(shè)置好 Bean 資源加載器。

② 調(diào)用父類的路徑。方法設(shè)置 Bean 配置信息定位。

ClassPathXmlApplicationContext 通過調(diào)用父類 AbstractApplicationContext 的方法啟動(dòng)

整個(gè) IoC 容器對(duì) Bean 定義的載入過程, refresh 是⼀個(gè)模板方法,規(guī)定了 IoC 容器的啟動(dòng)流程。在創(chuàng)建 IoC 容器前如果已有容器存在,需要把已有的容器銷毀,保證在的 IoC 容器。

方法后使用的是新創(chuàng)建容器創(chuàng)建后通過方法加載 Bean 配置資源,該方法做兩件事:

① 調(diào)用資源加載器的方法獲取要加載的資源。

② 真正執(zhí)行加載功能,由子類 XmlBeanDefinitionReader 實(shí)現(xiàn)。加載資源時(shí)⾸先解析配置文件路徑,讀取配置文件的內(nèi)容,然后通過 XML 解析器將 Bean 配置信息轉(zhuǎn)換成⽂檔對(duì)象,之后按照 Spring Bean 的定義規(guī)則對(duì)⽂檔對(duì)象進(jìn)⾏解析。

Spring IoC 容器中注冊(cè)解析的 Bean 信息存放在⼀個(gè) HashMap 集合中,key 是字符串,值是BeanDefinition,注冊(cè)過程中需要使⽤ synchronized 保證線程安全。當(dāng)配置信息中配置的 Bean 被解析且被注冊(cè)到 IoC 容器中后,初始化就算真正完成了,Bean 定義信息已經(jīng)可以使⽤且可被檢索。Spring IoC 容器的作用就是對(duì)這些注冊(cè)的 Bean 定義信息進(jìn)⾏處理和維護(hù),注冊(cè)的 Bean 定義信息是控制反轉(zhuǎn)和依賴注⼊的基礎(chǔ)。

基于注解的容器初始化分為兩種:① 直接將注解 Bean 注冊(cè)到容器中,可以在初始化容器時(shí)注冊(cè),也可以在容器創(chuàng)建之后⼿動(dòng)注冊(cè),然后刷新容器使其對(duì)注冊(cè)的注解 Bean 進(jìn)行處理。② 通過掃描指定的包及其子包的所有類處理, 在初始化注解容器時(shí)指定要⾃動(dòng)掃描的路徑。

Q7:依賴注⼊的實(shí)現(xiàn)方法有哪些?

構(gòu)造方法注入: IoC Service Provider 會(huì)檢查被注⼊對(duì)象的構(gòu)造⽅法,取得它所需要的依賴對(duì)象列表,進(jìn)⽽為其注⼊相應(yīng)的對(duì)象。這種方法的優(yōu)點(diǎn)是在對(duì)象構(gòu)造完成后就處于就緒狀態(tài),可以馬上使用。缺點(diǎn)是當(dāng)依賴對(duì)象較多時(shí),構(gòu)造⽅法的參數(shù)列表會(huì)比較長(zhǎng),構(gòu)造方法無法被繼承,無法設(shè)置默認(rèn)值。對(duì)于非必需的依賴處理可能需要引⼊多個(gè)構(gòu)造方法,參數(shù)數(shù)量的變動(dòng)可能會(huì)造成維護(hù)的困難。

setter 方法注入:當(dāng)前對(duì)象只需要為其依賴對(duì)象對(duì)應(yīng)的屬性添加 setter 方法,就可以通過 setter 方法將依賴對(duì)象注入到被依賴對(duì)象中。setter方法注⼊在描述性上要比構(gòu)造方法注⼊強(qiáng),并且可以被集成, 允許設(shè)置默認(rèn)值。缺點(diǎn)是無法在對(duì)象構(gòu)造完成后馬上進(jìn)⼊就緒狀態(tài)。

接口注入:必須實(shí)現(xiàn)某個(gè)接口,接口提供方法來為其注⼊依賴對(duì)象。使用少,因?yàn)樗鼜?qiáng)制要求被注入對(duì)象實(shí)現(xiàn)不必要接口,侵入性強(qiáng)。

Q8:依賴注入的相關(guān)注解?

@Autowired :自動(dòng)按類型注⼊,如果有多個(gè)匹配則按照指定 Bean 的 id 查找,查找不到會(huì)報(bào)錯(cuò)。

@Qualifier :在自動(dòng)按照類型注入的基礎(chǔ)上再按照 Bean 的 id 注入,給變量注入時(shí)必須搭配。

@Autowired ,給方法注⼊時(shí)可單獨(dú)使⽤。直接按照 Bean 的 id 注入,只能注入Bean 類型。

Q9:依賴注入的過程?

方法獲取 Bean 實(shí)例,該方法調(diào)⽤Bean 的功能,也是觸發(fā)依賴注入的地方。具體創(chuàng)建 Bean 對(duì)象的過程由 ObjectFactory 的, doGetBean 真正實(shí)現(xiàn)從 IoC 容器獲取完成,該方法主要通過依賴注入進(jìn)⾏處理。方法生成Bean 包含的 Java 對(duì)象實(shí)例和方法對(duì) Bean 屬性的。

在 populateBean 方法中,注入過程主要分為兩種情況:① 屬性值類型不需要強(qiáng)制轉(zhuǎn)換時(shí),不需要解析屬性值,直接進(jìn)行依賴注入。②屬性值類型需要強(qiáng)制轉(zhuǎn)換時(shí),首先解析屬性值,然后對(duì)解析后的屬性值進(jìn)行依賴注⼊。依賴注入的過程就是將 Bean 對(duì)象實(shí)例設(shè)置到它所依賴的 Bean 對(duì)象屬性上,真正的

依賴注入是通過方法實(shí)現(xiàn)的,該方法使用了委派模式。

BeanWrapperImpl 類負(fù)責(zé)對(duì)完成初始化的 Bean 對(duì)象進(jìn)行依賴注入,對(duì)于非集合類型屬性,使用 JDK反射,通過屬性的 setter 方法為屬性設(shè)置注入后的值。對(duì)于集合類型的屬性,將屬性值解析為⽬標(biāo)類型的集合后直接賦值給屬性。

當(dāng)容器對(duì) Bean 的定位、載入、解析和依賴注⼊全部完成后就不再需要手動(dòng)創(chuàng)建對(duì)象,IoC 容器會(huì)⾃動(dòng)為我們創(chuàng)建對(duì)象并且注入依賴。

Q10:Bean 的生命周期?

在 IoC 容器的初始化過程中會(huì)對(duì) Bean 定義完成資源定位,加載讀取配置并解析,最后將解析的 Bean 信息放在⼀個(gè) HashMap 集合中。當(dāng) IoC 容器初始化完成后,會(huì)進(jìn)行對(duì) Bean 實(shí)例的創(chuàng)建和依賴注⼊過程,注⼊對(duì)象依賴的各種屬性值,在初始化時(shí)可以指定自定義的初始化方法。經(jīng)過這⼀系列初始化操作后 Bean 達(dá)到可⽤狀態(tài),接下來就可以使⽤ Bean 了,當(dāng)使用完成后會(huì)調(diào)⽤ destroy 方法進(jìn)⾏銷毀,此時(shí)也可以指定⾃定義的銷毀方法,最終 Bean 被銷毀且從容器中移除。

XML 方式通過配置 bean 標(biāo)簽中的 init-Method 和 destory-Method 指定自定義初始化和銷毀方法。注解方式通過和注解指定⾃定義初始化和銷毀方法。

@PostConstruct 和@PreDestroy 注解方式,使用 customInit()和customDestroy()方法管理 bean 生命周期的代碼樣例如下:

<beans>
 
<bean id="demoBean"
 
class="com.springmeng.task.DemoBean"
 
init-method="customInit" destroymethod="customDestroy"></bean>
 
</beans>

更多內(nèi)容請(qǐng)參考:Spring 生命周期 Spring Bean Life Cycle:

https://howtodoinjava.com/spring-core/spring-beanlife-cycle/

Q11:Bean 的作⽤范圍?

通過 scope 屬性指定 bean 的作用范圍,包括:

① singleton:?jiǎn)卫J?,是默認(rèn)作用域,不管收到多少 Bean 請(qǐng)求每個(gè)容器中只有⼀個(gè)唯⼀的 Bean 實(shí)例。

② prototype:原型模式,和 singleton 相反,每次 Bean 請(qǐng)求都會(huì)創(chuàng)建⼀個(gè)新的實(shí)例。

③ request:每次 HTTP 請(qǐng)求都會(huì)創(chuàng)建⼀個(gè)新的 Bean 并把它放到 request 域中,在請(qǐng)求完成后 Bean會(huì)失效并被垃圾收集器回收。

④ session:和 request 類似,確保每個(gè) session 中有⼀個(gè) Bean 實(shí)例,session 過期后bean會(huì)隨之失效。

⑤ global session:當(dāng)應(yīng)⽤部署在 Portlet 容器時(shí),如果想讓所有 Portlet 共⽤全局存儲(chǔ)變量,那么該變量需要存儲(chǔ)在 global session 中。

Q12:如何通過 XML ⽅式創(chuàng)建 Bean?

默認(rèn)無參構(gòu)造方法,只需要指明 bean 標(biāo)簽中的 id 和 class 屬性,如果沒有無參構(gòu)造方法報(bào)錯(cuò)。

靜態(tài)工廠方法,通過 bean 標(biāo)簽中的 class 屬性指明靜態(tài)工廠,factory-method 屬性指明靜態(tài)工廠方法。

實(shí)例工廠方法,通過 bean 標(biāo)簽中的 factory-bean 屬性指明實(shí)例工廠,factory-method 屬性指明實(shí)例工廠方法。

Q13:Spring 有幾種配置方式?

將 Spring 配置到應(yīng)用開發(fā)中有以下三種方式:

1. 基于 XML 的配置

2. 基于注解的配置

3. 基于 Java 的配置

Q14:如何用基于 XML 配置的方式配置 Spring?

在 Spring 框架中,依賴和服務(wù)需要在專門的配置文件來實(shí)現(xiàn),我常用的 XML 格式的配置文件。這些配置文件的格式通常用開頭,然后一系列的 bean 定義和專門的應(yīng)用配置選項(xiàng)組成。

SpringXML 配置的主要目的時(shí)候是使所有的 Spring 組件都可以用 xml 文件的形式來進(jìn)行配置。這意味著不會(huì)出現(xiàn)其他的Spring 配置類型(比如聲明的方式或基于 Java Class 的配置方式)。Spring 的 XML 配置方式是使用被 Spring 命名空間的所支持的一系列的 XML 標(biāo)簽來實(shí)現(xiàn)的。Spring 有以下主要的命名空間:context、beans、jdbc、tx、aop、mvc 和 aso。

<beans>
 
<!-- JSON Support -->
 
<bean name="viewResolver"
 
class="org.springframework.web.servlet.view.BeanNameVi
ewResolver"/>
 
<bean name="jsonTemplate"
 
class="org.springframework.web.servlet.view.json.Mappi
ngJackson2JsonView"/>
 
<bean id="restTemplate"
 
class="org.springframework.web.client.RestTemplate"/>
 
</beans>

Q15:如何通過注解創(chuàng)建 Bean?

把當(dāng)前類對(duì)象存入 Spring 容器中,相當(dāng)于在 xml 中配置⼀個(gè) bean 標(biāo)簽。value 屬性指定 bean 的 id,默認(rèn)使用當(dāng)前類的字母首小寫的類名。

@Controller,@Service ,@Repository 三個(gè)注解都是的衍生注解,作用及屬性都是⼀模⼀樣的。只是提供了更加明確語義, @Controller 用于控制層,@Service用于業(yè)務(wù)層,@Repository 用于持久層。如果注解中有且只有⼀個(gè) value 屬性要賦值時(shí)可以省略 value。

如果想將第三方的類變成組件又沒有源代碼,也就沒辦法使用 進(jìn)行自動(dòng)配置,這種時(shí)候就要使⽤注解。被注解的⽅法返回值是⼀個(gè)對(duì)象,將會(huì)實(shí)例化,配置和初始化⼀個(gè)新對(duì)象并返回,這個(gè)對(duì)象由 Spring 的 IoC 容器管理。name 屬性用于給當(dāng)前注解方法創(chuàng)建的對(duì)象指定⼀個(gè)名稱,即 bean 的 id。當(dāng)使用注解配置方法時(shí),如果方法有參數(shù),Spring 會(huì)去容器查找是否有可⽤ bean對(duì)象,查找方式和⼀樣。

<web-app>
 
<display-name>Archetype Created Web
 
Application</display-name>
 
<servlet>
 
<servlet-name>spring</servlet-name>
 
<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

看到這里的小伙伴,給個(gè)三連支持下,祝你offer收到手疼,嘿嘿……一起進(jìn)步!

Q16:如何通過注解配置⽂件?

⽤于指定當(dāng)前類是⼀個(gè) spring 配置類,當(dāng)創(chuàng)建容器時(shí)會(huì)從該類上加載注解,value 屬性用于指定配置類的字節(jié)碼。

⽤于指定 Spring 在初始化容器時(shí)要掃描的包。basePackages 屬性用于指定要掃描的包。

用于加載文件中的配置。value 屬性用于指定⽂件位置,如果是在類路徑下需要加上 classpath。用于導(dǎo)⼊其他配置類,在引入其他配置類時(shí)可以不⽤再寫注解。有的是父配置類,引入的是子配置類。value 屬性用于指定其他配置類的字節(jié)碼。

Q17:BeanFactory、FactoryBean 和ApplicationContext 的區(qū)別?

BeanFactory 是⼀個(gè) Bean 工廠,使用簡(jiǎn)單工廠模式,是 Spring IoC 容器頂級(jí)接口,可以理解為含有Bean 集合的工廠類,作用是管理 Bean,包括實(shí)例化、定位、配置對(duì)象及建⽴這些對(duì)象間的依賴。BeanFactory 實(shí)例化后并不會(huì)自動(dòng)實(shí)例化 Bean,只有當(dāng) Bean 被使⽤時(shí)才實(shí)例化與裝配依賴關(guān)系,屬于延遲加載,適合多例模式。

FactoryBean 是⼀個(gè)工廠Bean,使用了工廠方法模式,作⽤是⽣產(chǎn)其他 Bean 實(shí)例,可以通過實(shí)現(xiàn)該接⼝,提供⼀個(gè)工廠方法來⾃定義實(shí)例化 Bean 的邏輯。FactoryBean 接口由 BeanFactory 中配置的對(duì)象實(shí)現(xiàn),這些對(duì)象本身就是用于創(chuàng)建對(duì)象的工廠,如果⼀個(gè) Bean 實(shí)現(xiàn)了這個(gè)接口,那么它就是創(chuàng)建對(duì)象的工廠 Bean,而不是 Bean 實(shí)例本身。

ApplicationConext 是 BeanFactory 的子接口,擴(kuò)展了 BeanFactory 的功能,提供了支持國際化的⽂本消息,統(tǒng)⼀的資源⽂件讀取方式,事件傳播以及應(yīng)⽤層的特別配置等。容器會(huì)在初始化時(shí)對(duì)配置的Bean 進(jìn)行預(yù)實(shí)例化,Bean 的依賴注入在容器初始化時(shí)就已經(jīng)完成,屬于立即加載,適合單例模式,⼀般推薦使用。

Q18: 解 釋 Spring 框 架 中 bean 的 生 命 周 期 。

Spring容器從XML文件中 取 bean的定義,并實(shí)例化 bean。

Spring 根 據(jù) bean 的定義填充所有的屬 性 。

如果bean實(shí)現(xiàn)了BeanNameAware 接口 ,Spring 傳遞bean 的 ID到setBeanName 方法 。

如果 Bean實(shí)現(xiàn)了BeanFactoryAware 接口 ,Spring傳 遞 beanfactory 給 setBeanFactory方法。

如果有任何與bean 相關(guān)的BeanPostProcessors,Spring會(huì)在 postProcesserBeforeInitialization()方 法內(nèi) 調(diào) 用 它 們 。

如 果 bean 實(shí) 現(xiàn) IntializingBean了 ,調(diào) 用 它 的afterPropertySet 方法 ,如果 bean聲明了初始化方法 ,調(diào)用此初始化方法 。

如果有BeanPostProcessors 和bean關(guān)聯(lián) ,這些 bean的postProcessAfterInitialization() 方法將 被調(diào)用 。

如果bean實(shí)現(xiàn)了DisposableBean, 它將調(diào)用destroy()方 法 。

Q19:怎樣開啟注解裝配 ?

注解裝配在默認(rèn)情 況下是不開啟的 ,為了使用注解裝配 ,我們必須在Spring 配置文件中配置元素 。

Q20:Spring 支 持 的 ORM有那些?,

Spring支持以下ORM:

1,Hibernate

2,iBatis

3,JPA (Java Persistence API)

4,TopLink

5,JDO (Java Data Objects)

6,OJB

Q21:Spring 框架中的單例 Beans 是線程安全的么?

Spring 框架并沒有對(duì)單例 bean 進(jìn)行任何多線程的封裝處理。

關(guān)于單例 bean 的線程安全和并發(fā)問題需要開發(fā)者自行去搞定。但實(shí)際上大部分的 Spring bean 并沒有可變的狀態(tài)(比如 Serview 類和 DAO 類),所以在某種程度上說 Spring 的單例 bean 是線程安全的。如果你的 bean 有多種狀態(tài)的話(比如 View Model 對(duì)象),就需要自行保證線程安全。

最淺顯的解決辦法就是將多態(tài) bean 的作用域由“singleton”變更為“prototype”。

Q22:Spring 框架中都用到了哪些設(shè)計(jì)模式?

Spring 框架中使用到了大量的設(shè)計(jì)模式,下面列舉了比較有代表性的:

1. 代理模式—在 AOP 和 remoting 中被用的比較多。

2. 單例模式—在 spring 配置文件中定義的 bean 默認(rèn)為單例模式。

3. 模板方法—用來解決代碼重復(fù)的問題。比如. RestTemplate,JmsTemplate, JpaTemplate。

4. 前端控制器—Spring 提供了 DispatcherServlet 來對(duì)請(qǐng)求進(jìn)行分發(fā)。

5. 視圖幫助(View Helper )—Spring 提供了一系列的 JSP 標(biāo)簽,高效宏來輔助將分散的代碼整合在視圖里。

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

7. 工廠模式—BeanFactory 用來創(chuàng)建對(duì)象的實(shí)。

Q23:請(qǐng)舉例解釋@Autowired 注解?

@Autowired 注解對(duì)自動(dòng)裝配何時(shí)何處被實(shí)現(xiàn)提供了更多細(xì)粒度的控制。@Autowired 注解可以像@Required 注解、構(gòu)造器一樣被用于在 bean 的設(shè)值方法上自動(dòng)裝配 bean 的屬性,一個(gè)參數(shù)或者帶有任意名稱或帶有多個(gè)參數(shù)的方法

比如,可以在設(shè)值方法上使用@Autowired 注解來替代配置文件中的元素。當(dāng) Spring 容器在 setter 方法上找到@Autowired 注解時(shí),會(huì)嘗試用 byType 自動(dòng)裝配。

當(dāng)然我們也可以在構(gòu)造方法上使用@Autowired 注解。帶有@Autowired 注解的構(gòu)造方法意味著在創(chuàng)建一個(gè) bean 時(shí)將會(huì)被自動(dòng)裝配,即便在配置文件中使用元素。

public class TextEditor {
 
private SpellChecker spellChecker;
 
@Autowired
 
public TextEditor(SpellChecker spellChecker){
 
System.out.println("Inside TextEditor
constructor." );
 
this.spellChecker = spellChecker;
 
}
 
public void spellCheck(){
 
spellChecker.checkSpelling();
 
}
 
}

下面是沒有構(gòu)造參數(shù)的配置方式:

<beans>
  
<context:annotation-config/>
 
<!-- Definition for textEditor bean without
 
constructor-arg -->
 
<bean id="textEditor"
 
class="com.springmeng.TextEditor">
 
</bean>
 
<!-- Definition for spellChecker bean -->
 
<bean id="spellChecker"
 
class="com.howtodoinjava.SpellChecker">
 
</bean>
 
</beans>

到此這篇關(guān)于吊打Java面試官!整理了一周的Spring面試大全(附答案)的文章就介紹到這了,更多相關(guān)Java面試Spring內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java接口回調(diào)的本質(zhì)詳解

    Java接口回調(diào)的本質(zhì)詳解

    大家好,本篇文章主要講的是Java接口回調(diào)的本質(zhì)詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • springboot使用hibernate validator校驗(yàn)方式

    springboot使用hibernate validator校驗(yàn)方式

    hibernate validator提供了一套比較完善、便捷的驗(yàn)證實(shí)現(xiàn)方式。下面小編給大家介紹下springboot使用hibernate validator校驗(yàn)方式,感興趣的朋友一起看看吧
    2018-01-01
  • Java 替換word文檔文字并指定位置插入圖片

    Java 替換word文檔文字并指定位置插入圖片

    這篇文章主要介紹了Java 替換word文檔文字,指定位置插入圖片功能,本文通過實(shí)例代碼給大家講解,需要的朋友可以參考下
    2018-02-02
  • Java Lambda表達(dá)式超詳細(xì)介紹

    Java Lambda表達(dá)式超詳細(xì)介紹

    這篇文章主要介紹了Java Lambda表達(dá)式,Lambda表達(dá)式是Java SE 8中一個(gè)重要的新特性, Lambda 表達(dá)式(Lambda expression)可以看作是一個(gè)匿名函數(shù),基于數(shù)學(xué)中的λ演算得名,也可稱為閉包(Closure),下面來看看文章具體的詳細(xì)介紹吧
    2022-02-02
  • Java 深入分析鏈表面試實(shí)例題目

    Java 深入分析鏈表面試實(shí)例題目

    鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的,本篇帶你通過兩個(gè)實(shí)例題目來深入探索
    2022-03-03
  • Springboot整合企業(yè)微信機(jī)器人助手推送消息的實(shí)現(xiàn)

    Springboot整合企業(yè)微信機(jī)器人助手推送消息的實(shí)現(xiàn)

    本文主要介紹了Springboot整合企業(yè)微信機(jī)器人助手推送消息的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java8使用Supplier啟動(dòng)ScheduledThread代碼實(shí)例

    Java8使用Supplier啟動(dòng)ScheduledThread代碼實(shí)例

    這篇文章主要介紹了Java8使用Supplier啟動(dòng)ScheduledThread詳解,項(xiàng)目開啟立即啟動(dòng)定時(shí)任務(wù)是很多項(xiàng)目都會(huì)遇到的一個(gè)需求,如何利用Java提供的函數(shù)優(yōu)雅的寫出來十分考驗(yàn)一個(gè)人的功底,需要的朋友可以參考下
    2024-01-01
  • SpringBoot使用@Cacheable注解實(shí)現(xiàn)緩存功能流程詳解

    SpringBoot使用@Cacheable注解實(shí)現(xiàn)緩存功能流程詳解

    最近一直再學(xué)Spring Boot,在學(xué)習(xí)的過程中也有過很多疑問。為了解答自己的疑惑,也在網(wǎng)上查了一些資料,以下是對(duì)@Cacheable注解的一些理解
    2023-01-01
  • SpringBoot 靜態(tài)資源導(dǎo)入及首頁設(shè)置問題

    SpringBoot 靜態(tài)資源導(dǎo)入及首頁設(shè)置問題

    本節(jié)了解一下 SpringBoot 中 Web 開發(fā)的靜態(tài)資源導(dǎo)入和首頁設(shè)置,對(duì)應(yīng) SpringBoot-03-Web 項(xiàng)目,本節(jié)主要是從源碼的角度,研究了一下靜態(tài)資源導(dǎo)入和首頁設(shè)置的問題
    2021-09-09
  • java必學(xué)必會(huì)之線程(1)

    java必學(xué)必會(huì)之線程(1)

    java必學(xué)必會(huì)之線程第一篇,介紹了線程的基本概念、線程的創(chuàng)建和啟動(dòng),想要學(xué)好java線程的朋友一定要好好閱讀這篇文章
    2015-12-12

最新評(píng)論