日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺

發(fā)布時(shí)間:2025/4/16 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

知識鋪: 致力于打造輕知識點(diǎn),持續(xù)更新每次的知識點(diǎn)較少,閱讀不累。不占太多時(shí)間,不停地來喚醒記憶深處的知識點(diǎn)。

Q1。什么是Spring框架?

Spring是最流行的企業(yè)應(yīng)用程序框架之一。Spring框架的核心基于依賴注入設(shè)計(jì)模式,該模型允許我們解耦依賴關(guān)系。

Q2。Spring有什么好處?

Spring Framework使構(gòu)建企業(yè)Java應(yīng)用程序更加容易

優(yōu)點(diǎn):

  • IoC容器:Spring使用其IoC容器管理Spring Bean和配置的生命周期,這使項(xiàng)目管理和維護(hù)更加容易。

  • 靈活性:Spring提供了將其與任何基于Java的技術(shù)集成的靈活性。

  • 控制反轉(zhuǎn):Spring將負(fù)責(zé)為我們的應(yīng)用程序注入所需的依賴關(guān)系,不再需要我們手動(dòng)搜索和為我們的應(yīng)用程序注入所需的依賴關(guān)系。

  • 輕量級:Spring包含彼此之間具有最小依賴性的不同模塊,這使其輕巧靈活。

  • 端到端開發(fā):Spring框架為應(yīng)用程序開發(fā)的所有方面提供模塊,范圍從依賴注入,持久性,緩存,業(yè)務(wù),Web,REST,它是用于開發(fā)所有類型的基于Java的企業(yè)應(yīng)用程序的生態(tài)系統(tǒng)。

  • 事務(wù)管理:框架為事務(wù)管理提供了抽象和透明層。這提供了一個(gè)可插拔的體系結(jié)構(gòu),我們可以在不更改核心系統(tǒng)的情況下注入不同的事務(wù)管理器。

  • AOP:它支持面向方面的編程(AOP)。AOP解決了 跨領(lǐng)域關(guān)注的問題。

  • 非侵入性:Spring不會(huì)強(qiáng)迫我們使用任何基于Spring的接口或擴(kuò)展任何基于Spring的類以使用其功能,這些功能賦予了將其與其他技術(shù)結(jié)合使用的靈活性。例如,我們可以使用@Inject不是基于Spring的注解的注解來注入依賴項(xiàng)。

  • 異常處理:Spring Framework提供了多個(gè)選項(xiàng),以更好,更靈活的方式處理異常。

Q3。什么是依賴注入?

依賴注入是一種技術(shù),使我們可以使我們的項(xiàng)目松散耦合,并使用一些注解將它們定義為bean注入必需的依賴@Service,@Component,@Repository,@Controller或@Bean注解。

Q4。什么是Spring IOC容器?

Spring IoC容器是Spring框架的核心管理系統(tǒng)。它負(fù)責(zé)創(chuàng)建,配置和管理這些對象的生命周期。容器通過讀取以XML配置或注解形式提供的配置元數(shù)據(jù)來獲取有關(guān)實(shí)例化,配置和組裝哪些對象的指令,能夠表達(dá)組成應(yīng)用程序的對象以及這些對象之間的豐富相互依賴關(guān)系。

Q5。Spring提供哪些不同的IOC容器?

Spring Framework提供以下兩種類型的容器。

  • BeanFactory容器:這是Spring框架中可用的基本容器,支持依賴項(xiàng)注入(DI)。 org.springframework.beans 和 org.springframework.context 包是Spring框架IoC容器的基礎(chǔ)。

  • ApplicationContext的容器:將ApplicationContext 增加更多的企業(yè)特定的功能。該 ApplicationContext 是對一個(gè)完整的超集 BeanFactory.

Q6。Spring支持哪些類型的依賴注入技術(shù)?

Spring支持三種類型的依賴注入

  • 基于Setter的依賴注入。

  • 基于構(gòu)造函數(shù)的依賴注入。

  • 基于字段注入

Q7。Spring支持哪些bean作用域?

Spring支持低于7個(gè)作用域。

  • singleton

  • prototype

  • request

  • session

  • application

  • websocket

  • globalSession

Q8。解釋Spring中的bean作用域?

Bean作用域定義了Bean的生命周期。

  • singleton(默認(rèn)*)

為每個(gè)Spring IoC容器的單個(gè)對象實(shí)例限定單個(gè)bean定義。

  • prototype

為多個(gè)對象實(shí)例的單個(gè)bean定義范圍。

  • request

將單個(gè)bean定義的范圍限定為單個(gè)HTTP請求的生命周期;也就是說,每個(gè)HTTP請求都將在單個(gè)bean定義的后面創(chuàng)建一個(gè)自己的bean實(shí)例。僅在實(shí)現(xiàn)了 web-aware的Spring ApplicationContext中有效。

  • session

將單個(gè)bean定義的范圍限定為HTTP Session的生命周期。僅在實(shí)現(xiàn)了 web-aware的Spring ApplicationContext中有效。

  • globalSession

將單個(gè)bean定義的作用域限定為全局HTTP會(huì)話的生命周期。通常,僅在portlet上下文中使用時(shí)才有效。僅在實(shí)現(xiàn)了 web-aware的Spring ApplicationContext中有效。

Q9。Spring中bean的默認(rèn)范圍是什么?我們?nèi)绾卧趹?yīng)用程序中更改默認(rèn)范圍?

默認(rèn)情況下,Spring bean是單例作用域。要在我們的應(yīng)用程序中更改默認(rèn)的bean作用域,我們應(yīng)該實(shí)現(xiàn) BeanFactoryPostProcessor接口,并重寫postProcessBeanFactory()方法來設(shè)置所需的bean作用域。

public class CustomScopedPostProcessor implements BeanFactoryPostProcessor {
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
for (String beanName: factory.getBeanDefinitionNames()) {
BeanDefinition beanDefinition = factory.getBeanDefinition(beanName);
beanDefinition.setScope("prototype");
}
}
}

Q10。如何在Spring中創(chuàng)建自定義范圍?

從Spring 2.0開始,Spring中的bean作用域機(jī)制是可擴(kuò)展的。這意味著它不僅為Spring開箱即用提供的bean作用域,還可以定義自己的作用域。在Spring中閱讀 Custom Scope, 以了解如何在應(yīng)用程序中創(chuàng)建和使用自定義范圍。

Q11。在Spring Bean注入推薦方法是什么?

將依賴項(xiàng)注入Spring組件的推薦方法是使用構(gòu)造函數(shù)注入。其次是所需的任何強(qiáng)制性依賴項(xiàng)。對于可選的依賴項(xiàng),請使用setter注入。

Q12。Spring有哪些不同的模塊/子項(xiàng)目?

  • Spring Core.

  • Spring JDBC

  • ORM Module

  • Spring AOP

  • Spring MVC

Q13。Spring框架中使用了哪些設(shè)計(jì)模式?

  • Singleton作用域bean中的Singleton模式

  • Spring MVC中的模型視圖控制器模式

  • Spring DAO支持中的數(shù)據(jù)訪問對象

  • Spring Dispatcher Servlet中的前端控制器

  • Spring JDBC支持中的模板方法模式

  • Spring MVC和Spring Web中的適配器模式

  • Spring AOP支持中的代理模式

  • Bean Factory類中的工廠模式

Q14。什么是Spring配置文件?

Spring概要文件使我們能夠基于dev,test,pro等概要文件來配置Spring Bean。可以根據(jù)不同的環(huán)境,自由選擇當(dāng)前對應(yīng)環(huán)境的對應(yīng)配置文件,這也是體現(xiàn)在Spring的靈活性方面。

Q15。@Required注解有什么作用?

該@Required注解適用于bean屬性setter方法。此注解表明,必須在配置時(shí)填充受影響的bean屬性。如果所需的依賴項(xiàng)不可用,則容器將拋出 BeanInitializationException異常。

public class ShowCart {
private CartService cartService;
@Required
public void setCartService(CartService cartService) {
this.cartService = cartService;
}
// ...
}

Q16。@Autowired注解有什么作用?

該 @Autowired 注解用于與字段或用于通過類型注入bean方法。這個(gè)注解允許Spring解析協(xié)作bean并將其注入所需的bean中。

Q17。@Qualifier注解有什么作用?

當(dāng)同一bean的實(shí)例很多時(shí),@Qualifier注解會(huì)有所幫助。讓我們舉一個(gè)例子,其中兩個(gè)bean實(shí)現(xiàn)相同的接口。

public interface CartService {
public void addToCart();
}
@Component(value = "cartService")
public class DefaultCartService implements CartService {
@Override
public void addToCart() {
System.out.println("Add to cart");
}
}
@Component(value = "customCartService")
public class CustomCartService implements CartService {
@Override
public void addToCart() {
System.out.println("custom add to cart service");
}
}

此注解與@Autowired注解緊密配合。為了注入CustomCartService我們的代碼AddToCartService,我們使用@Autowired 和 @Qualifier注解。如果我們不使用@Qualifier,Spring拋出NoUniqueBeanDefinitionException.

@Component
public class AddToCartService {
@Autowired
@Qualifier("customCartService")
private CartService cartService;
public void addToCart() {
cartService.addToCart();
}

Q18。@Primary注解有什么作用?它的重要性是什么?

@Primarary注解顯示,當(dāng)有多個(gè)候選條件可以自動(dòng)裝配時(shí),它應(yīng)該給Bean一個(gè)優(yōu)先級。

public interface CartService {
public void addToCart();
}
@Component
public class DefaultCartService implements CartService {
@Override
public void addToCart() {
System.out.println("Add to cart");
}
}
@Primary
@Component
public class CustomCartService implements CartService {
@Override
public void addToCart() {
System.out.println("custom add to cart service");
}
}

因?yàn)?CustomerCartService 標(biāo)記為 @Primary,所以DefaultCartService假設(shè)它們在相同的Spring應(yīng)用程序上下文中都作為bean存在,它將優(yōu)先于變體注入。

Q19。在Spring項(xiàng)目中,我們可以通過幾種方式處理異常?

  • 通過@ExceptionHandler在控制器級別使用注解。

  • 使用HandlerExceptionResolver,我們可以在整個(gè)應(yīng)用程序級別處理異常。

  • 通過使用@ControllerAdvice注解,我們可以為應(yīng)用程序級控制配置異常處理程序,并且仍然保持代碼非常干凈和模塊化。

Q20。@ Component,@ Controller,@ Service和@Repository之類的注解之間有什么區(qū)別?

總而言之,@Component注解是通用注解。因此,無論是控制器,服務(wù)還是存儲庫,都是組件。有關(guān)細(xì)節(jié),讓我們看一下其中的每個(gè):

  • @Controller:此批注啟用@RequestMapping對類中批注的檢測。

  • @Service:它表明該類處理了應(yīng)用程序的業(yè)務(wù)邏輯,應(yīng)調(diào)用@Repository類進(jìn)行數(shù)據(jù)庫交互。

  • @Repository:這表明該類定義了一個(gè)DB接口。它確保特定于平臺的異常再次捕獲并作為Spring特定的未經(jīng)檢查的異常再次拋出。

Q21。Singleton設(shè)計(jì)模式和Spring Singleton范圍有什么區(qū)別?

Singleton設(shè)計(jì)模式與Spring Singleton范圍之間的比較像。(GoF)一書中定義的Singleton設(shè)計(jì)模式指的是每個(gè)ClassLoader僅一個(gè)實(shí)例的對象的范圍 。Spring Singleton bean 被稱為“每個(gè)bean和每個(gè)容器一個(gè)實(shí)例”。為了進(jìn)一步了解它,讓我們看下面的示例

總結(jié)

以上是生活随笔為你收集整理的spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。