javascript
spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺
知識鋪: 致力于打造輕知識點,持續更新每次的知識點較少,閱讀不累。不占太多時間,不停地來喚醒記憶深處的知識點。
Q1。什么是Spring框架?
Spring是最流行的企業應用程序框架之一。Spring框架的核心基于依賴注入設計模式,該模型允許我們解耦依賴關系。
Q2。Spring有什么好處?
Spring Framework使構建企業Java應用程序更加容易
優點:
IoC容器:Spring使用其IoC容器管理Spring Bean和配置的生命周期,這使項目管理和維護更加容易。
靈活性:Spring提供了將其與任何基于Java的技術集成的靈活性。
控制反轉:Spring將負責為我們的應用程序注入所需的依賴關系,不再需要我們手動搜索和為我們的應用程序注入所需的依賴關系。
輕量級:Spring包含彼此之間具有最小依賴性的不同模塊,這使其輕巧靈活。
端到端開發:Spring框架為應用程序開發的所有方面提供模塊,范圍從依賴注入,持久性,緩存,業務,Web,REST,它是用于開發所有類型的基于Java的企業應用程序的生態系統。
事務管理:框架為事務管理提供了抽象和透明層。這提供了一個可插拔的體系結構,我們可以在不更改核心系統的情況下注入不同的事務管理器。
AOP:它支持面向方面的編程(AOP)。AOP解決了 跨領域關注的問題。
非侵入性:Spring不會強迫我們使用任何基于Spring的接口或擴展任何基于Spring的類以使用其功能,這些功能賦予了將其與其他技術結合使用的靈活性。例如,我們可以使用@Inject不是基于Spring的注解的注解來注入依賴項。
異常處理:Spring Framework提供了多個選項,以更好,更靈活的方式處理異常。
Q3。什么是依賴注入?
依賴注入是一種技術,使我們可以使我們的項目松散耦合,并使用一些注解將它們定義為bean注入必需的依賴@Service,@Component,@Repository,@Controller或@Bean注解。
Q4。什么是Spring IOC容器?
Spring IoC容器是Spring框架的核心管理系統。它負責創建,配置和管理這些對象的生命周期。容器通過讀取以XML配置或注解形式提供的配置元數據來獲取有關實例化,配置和組裝哪些對象的指令,能夠表達組成應用程序的對象以及這些對象之間的豐富相互依賴關系。
Q5。Spring提供哪些不同的IOC容器?
Spring Framework提供以下兩種類型的容器。
BeanFactory容器:這是Spring框架中可用的基本容器,支持依賴項注入(DI)。 org.springframework.beans 和 org.springframework.context 包是Spring框架IoC容器的基礎。
ApplicationContext的容器:將ApplicationContext 增加更多的企業特定的功能。該 ApplicationContext 是對一個完整的超集 BeanFactory.
Q6。Spring支持哪些類型的依賴注入技術?
Spring支持三種類型的依賴注入
基于Setter的依賴注入。
基于構造函數的依賴注入。
基于字段注入
Q7。Spring支持哪些bean作用域?
Spring支持低于7個作用域。
singleton
prototype
request
session
application
websocket
globalSession
Q8。解釋Spring中的bean作用域?
Bean作用域定義了Bean的生命周期。
singleton(默認*)
為每個Spring IoC容器的單個對象實例限定單個bean定義。
prototype
為多個對象實例的單個bean定義范圍。
request
將單個bean定義的范圍限定為單個HTTP請求的生命周期;也就是說,每個HTTP請求都將在單個bean定義的后面創建一個自己的bean實例。僅在實現了 web-aware的Spring ApplicationContext中有效。
session
將單個bean定義的范圍限定為HTTP Session的生命周期。僅在實現了 web-aware的Spring ApplicationContext中有效。
globalSession
將單個bean定義的作用域限定為全局HTTP會話的生命周期。通常,僅在portlet上下文中使用時才有效。僅在實現了 web-aware的Spring ApplicationContext中有效。
Q9。Spring中bean的默認范圍是什么?我們如何在應用程序中更改默認范圍?
默認情況下,Spring bean是單例作用域。要在我們的應用程序中更改默認的bean作用域,我們應該實現 BeanFactoryPostProcessor接口,并重寫postProcessBeanFactory()方法來設置所需的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中創建自定義范圍?
從Spring 2.0開始,Spring中的bean作用域機制是可擴展的。這意味著它不僅為Spring開箱即用提供的bean作用域,還可以定義自己的作用域。在Spring中閱讀 Custom Scope, 以了解如何在應用程序中創建和使用自定義范圍。
Q11。在Spring Bean注入推薦方法是什么?
將依賴項注入Spring組件的推薦方法是使用構造函數注入。其次是所需的任何強制性依賴項。對于可選的依賴項,請使用setter注入。
Q12。Spring有哪些不同的模塊/子項目?
Spring Core.
Spring JDBC
ORM Module
Spring AOP
Spring MVC
Q13。Spring框架中使用了哪些設計模式?
Singleton作用域bean中的Singleton模式
Spring MVC中的模型視圖控制器模式
Spring DAO支持中的數據訪問對象
Spring Dispatcher Servlet中的前端控制器
Spring JDBC支持中的模板方法模式
Spring MVC和Spring Web中的適配器模式
Spring AOP支持中的代理模式
Bean Factory類中的工廠模式
Q14。什么是Spring配置文件?
Spring概要文件使我們能夠基于dev,test,pro等概要文件來配置Spring Bean。可以根據不同的環境,自由選擇當前對應環境的對應配置文件,這也是體現在Spring的靈活性方面。
Q15。@Required注解有什么作用?
該@Required注解適用于bean屬性setter方法。此注解表明,必須在配置時填充受影響的bean屬性。如果所需的依賴項不可用,則容器將拋出 BeanInitializationException異常。
public class ShowCart {
private CartService cartService;
@Required
public void setCartService(CartService cartService) {
this.cartService = cartService;
}
// ...
}
Q16。@Autowired注解有什么作用?
該 @Autowired 注解用于與字段或用于通過類型注入bean方法。這個注解允許Spring解析協作bean并將其注入所需的bean中。
Q17。@Qualifier注解有什么作用?
當同一bean的實例很多時,@Qualifier注解會有所幫助。讓我們舉一個例子,其中兩個bean實現相同的接口。
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注解顯示,當有多個候選條件可以自動裝配時,它應該給Bean一個優先級。
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");
}
}
因為 CustomerCartService 標記為 @Primary,所以DefaultCartService假設它們在相同的Spring應用程序上下文中都作為bean存在,它將優先于變體注入。
Q19。在Spring項目中,我們可以通過幾種方式處理異常?
通過@ExceptionHandler在控制器級別使用注解。
使用HandlerExceptionResolver,我們可以在整個應用程序級別處理異常。
通過使用@ControllerAdvice注解,我們可以為應用程序級控制配置異常處理程序,并且仍然保持代碼非常干凈和模塊化。
Q20。@ Component,@ Controller,@ Service和@Repository之類的注解之間有什么區別?
總而言之,@Component注解是通用注解。因此,無論是控制器,服務還是存儲庫,都是組件。有關細節,讓我們看一下其中的每個:
@Controller:此批注啟用@RequestMapping對類中批注的檢測。
@Service:它表明該類處理了應用程序的業務邏輯,應調用@Repository類進行數據庫交互。
@Repository:這表明該類定義了一個DB接口。它確保特定于平臺的異常再次捕獲并作為Spring特定的未經檢查的異常再次拋出。
Q21。Singleton設計模式和Spring Singleton范圍有什么區別?
Singleton設計模式與Spring Singleton范圍之間的比較像。(GoF)一書中定義的Singleton設計模式指的是每個ClassLoader僅一個實例的對象的范圍 。Spring Singleton bean 被稱為“每個bean和每個容器一個實例”。為了進一步了解它,讓我們看下面的示例
總結
以上是生活随笔為你收集整理的spring bean作用域_Spring面试知识点,这是我见过最全面的 - 知识铺的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言最大公约数和最小公倍数_五年级数学
- 下一篇: python批量自动填写网页表单_Pyt