spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺
知識鋪: 致力于打造輕知識點(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言最大公约数和最小公倍数_五年级数学
- 下一篇: jrebel热部署不起作用_5种Spri