Spring面試系列-01

1. 什么是 Spring 框架?

Spring中文翻譯過來是春天的意思,被稱為J2EE的春天,是一個開源的輕量級的Java開發框架, 具有控制反轉(IoC)和面向切面(AOP)兩大核心。Java Spring框架通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。

Spring框架不僅限于服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何 Java 應用都可以從Spring中受益。Spring框架還是一個超級粘合平臺,除了自己提供功能外,還提供粘合其他技術和框架的能力。

1)IOC 控制反轉

對象創建責任的反轉,在Spring中BeanFactory是IOC容器的核心接口,負責實例化,定位,配置應用程序中的對象及建立這些對象間的依賴。XmlBeanFactory實現BeanFactory接口,通過獲取xml配置文件數據,組成應用對象及對象間的依賴關系。

Spring中有3中注入方式,一種是set注入,另一種是注解注入,另一種是構造方法注入。

2)AOP面向切面編程

AOP是指縱向的編程,比如兩個業務,業務1和業務2都需要一個共同的操作,與其往每個業務中都添加同樣的代碼,通過寫一遍代碼,讓兩個業務共同使用這段代碼。

Spring中面向切面編程的實現有兩種方式,一種是動態代理,一種是CGLIB,動態代理必須要提供接口,而CGLIB實現是由=有繼承。

2. Spring框架的設計目標,設計理念,和核心是什么

Spring設計目標:Spring為開發者提供一個一站式輕量級應用開發平臺;

Spring設計理念:在JavaEE開發中,支持POJO和JavaBean開發方式,使應用面向接口開發,充分支持OO(面向對象)設計方法;Spring通過IoC容器實現對象耦合關系的管理,并實現依賴反轉,將對象之間的依賴關系交給IoC容器,實現解耦;

Spring框架的核心:IoC容器和AOP模塊。通過IoC容器管理POJO對象以及他們之間的耦合關系;通過AOP以動態非侵入的方式增強服務。

IoC讓相互協作的組件保持松散的耦合,而AOP編程允許你把遍布于應用各層的功能分離出來形成可重用的功能組件。

3. Spring 框架中使用了哪些設計模式?

Spring框架中使用大量的設計模式,下面列舉比較有代表性的:

代理模式

AOP能夠將那些與業務無關(事務處理、日志管理、權限控制等)封裝起來,便于減少系統的重復代碼,降低模塊間的耦合度有利于可拓展性和可維護性。

單例模式

Spring中bean的默認作用域是單例模式,在Spring配置文件中定義bean默認為單例模式。

模板方法模式

模板方法模式是一種行為設計模式,用來解決代碼重復的問題,如RestTemplate、JmsTemplate、JpaTemplate。

包裝器設計模式

Spring根據不同的業務訪問不同的數據庫,能夠動態切換不同的數據源。

觀察者模式

定義對象鍵一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都會得到通知被制動更新,如Spring中listener的實現–ApplicationListener。

Spring事件驅動模型就是觀察者模式很經典的一個應用。

工廠模式

Spring使用工廠模式通過BeanFactory、ApplicationContext創建bean對象。

4. Spring 依賴注入有幾種實現方式?

1)Constructor構造器注入:通過將@Autowired注解放在構造器上來完成構造器注入,默認構造器參數通過類型自動裝配。

public class Test {  private UserInterface user;  @Autowired private Test(UserInterface user) {  this.user = user;  }  
}

2)Field接口注入:通過將@Autowired注解放在構造器上來完成接口注入。

@Autowired //接口注入  
private IUserService userService;  

3)Setter方法參數注入:通過將@Autowired注解放在方法上來完成方法參數注入。

public class Test {private User user;@Autowiredpublic void setUser(User user) {  this.user = user;  }  public String getuser() {  return user;  }  
}

5. Spring 中常用的注解包含哪些?

1)聲明bean的注解

@Component 組件,沒有明確的角色

@Service 在業務邏輯層使用(service層)

@Repository 在數據訪問層使用(dao層)

@Controller 在展現層使用,控制器的聲明(C*上使用)

2)注入bean的注解

@Autowired:由Spring提供

@Inject:由JSR-330提供

@Resource:由JSR-250提供

都可以注解在set方法和屬性上,推薦注解在屬性上(一目了然,少寫代碼)。

3)java配置類相關注解

@Configuration 聲明當前類為配置類,相當于xml形式的Spring配置(類上使用),其中內部組合了@Component注解,表明這個類是一個bean(類上使用)

@Bean 注解在方法上,聲明當前方法的返回值為一個bean,替代xml中的方式(方法上使用)

@ComponentScan 用于對Component進行掃描,相當于xml中的(類上使用)

@WishlyConfiguration 為@Configuration與@ComponentScan的組合注解,可以替代這兩個注解

4)切面(AOP)相關注解

Spring支持AspectJ的注解式切面編程。

@Aspect 聲明一個切面(類上使用)

使用@After、@Before、@Around定義建言(advice),可直接將攔截規則(切點)作為參數。

@After 在方法執行之后執行(方法上使用)

@Before 在方法執行之前執行(方法上使用)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712050.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

three 層級模型

group.remove(mesh1,mesh2);Vector3與模型位置、縮放屬性 Group層級模型(樹結構) 創建了兩個網格模型mesh1、mesh2,通過THREE.Group類創建一個組對象group,然后通過add方法把網格模型mesh1、mesh2作為設置為組對象group的子對象,然后在通過執行scene.a…

jenkins部署maven項目

流程: jenkins從代碼倉庫讀取代碼,將代碼文件放入jenkins的工作空間,將jenkins工作空間的代碼進行打包,將jar包遠程發送給服務器。 一:所需插件二:Tools 三:System: 配置ssh連接的…

github要求2fa身份驗證

前言 github登陸的時候發現要求2fa驗證, 2fa是啥?咋驗證? 解決 2FA(Two-Factor Authentication,雙因素身份驗證) 就是在賬戶和密碼的基礎上增加一次驗證碼驗證,這樣即使密碼被竊取,由于黑客沒有你的驗證碼也無法登陸 就像是銀行的u盾一樣…

python63-Python的循環之循環使用else

Python的循環都可以定義else代碼塊&#xff0c;當循環條件為False 時&#xff0c;程序會執行else代碼塊。如下代碼示范了為while循環定義else代碼塊。 # !/usr/bin/env python# -*- coding: utf-8 -*-# Time : 2024/01# Author : Laopicount_i 0while count_i < 5:print(c…

Java集合相關面試題(2024大廠高頻面試題系列)

1、說一說Java提供的常見集合&#xff1f;&#xff08;畫一下集合結構圖&#xff09; 在java中提供了量大類的集合框架&#xff0c;主要分為兩類&#xff1a; 第一個是Collection 屬于單列集合&#xff0c;第二個是Map 屬于雙列集合 在Collection中有兩個子接口List和Set。…

【力扣hot100】刷題筆記Day14

前言 又是新的一周&#xff0c;快樂的周一&#xff0c;快樂地刷題&#xff0c;今天把鏈表搞完再干活&#xff01; 114. 二叉樹展開為鏈表 - 力扣&#xff08;LeetCode&#xff09; 前序遍歷 class Solution:def flatten(self, root: Optional[TreeNode]) -> None:if not r…

回溯 Leetcode 51 N皇后

N皇后 Leetcode 51 學習記錄自代碼隨想錄 按照國際象棋的規則&#xff0c;皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。 n 皇后問題 研究的是如何將 n 個皇后放置在 nn 的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊。 給你一個整數 n &#xff0c;返回所…

Linux —— 鏈接文件

硬鏈接 一般情況下&#xff0c;文件名和inode號碼是"一一對應"關系&#xff0c;每個inode號碼對應一個文件名。但是&#xff0c;Unix/Linux系統允許&#xff0c;多個文件名指向同一個inode號碼。 這意味著&#xff0c;可以用不同的文件名訪問同樣的內容&#xff1b;對…

軟件開發常見模型解析

軟件開發常見模型解析 摘要&#xff1a;本文將為您詳細介紹軟件開發過程中常見的幾種模型&#xff0c;包括瀑布模型、敏捷開發模型、螺旋模型、迭代模型和原型模型。通過了解這些模型的原理、優缺點&#xff0c;幫助您在不同的軟件項目中選擇最適合的開發模型。 一、引言 在…

【IC前端虛擬項目】inst_buffer子模塊DS與RTL編碼

【IC前端虛擬項目】數據搬運指令處理模塊前端實現虛擬項目說明-CSDN博客 需要說明一下的是,在我所提供的文檔體系里,并沒有模塊的DS文檔哈,因為實際項目里我也不怎么寫DS畢竟不是每個公司都和HISI一樣對文檔要求這么嚴格的。不過作為一個培訓的虛擬項目,還是建議在時間充裕…

Docker技術概論(3):Docker 中的基本概念

Docker技術概論&#xff08;3&#xff09; Docker 中的基本概念 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…

基于java+springboot女士電商平臺系統源碼+文檔設計

基于javaspringboot女士電商平臺系統源碼文檔設計 博主介紹&#xff1a;多年java開發經驗&#xff0c;專注Java開發、定制、遠程、文檔編寫指導等,csdn特邀作者、專注于Java技術領域 作者主頁 央順技術團隊 Java畢設項目精品實戰案例《1000套》 歡迎點贊 收藏 ?留言 文末獲取源…

C語言----動態內存管理(2)

1.這里總結動態內存管理里面的錯誤 &#xff08;1&#xff09;使用malloc開辟空間以后直接賦值 這個就是malloc開辟失敗返回空指針&#xff0c;直接給空指針賦值就是錯誤的&#xff0c; tip1:使用malloc開辟空間以后一定要判斷是否為空 &#xff08;2&#xff09; 越界訪問…

Python批量提取文件夾中圖片的名稱及路徑到指定的.txt文件中

目錄 一、代碼二、提取效果 一、代碼 import os# 定義要保存的文件名 file_name "TestImage/Image_Visible_Gray.txt"# 讀取文件夾路徑 folder_path "TestImage/Image_Visible_Gray"# 遍歷文件夾中的所有文件 with open(file_name, "w") as f…

IO進程線程day1

編寫鏈表&#xff0c;鏈表里面隨便搞點數據&#xff0c;使用fprintf將鏈表中所有的數據保存到文件中&#xff0c;用fscanf讀取文件中的數據寫入鏈表中 #include <stdio.h> #include <stdlib.h>typedef struct Node {int data;struct Node* next; } Node;// 創建新…

可移植性(兼容性)測試指南

可移植性是指應用程序能夠安裝到不同的環境中&#xff0c;在不同的環境中使用&#xff0c;甚至可以移動到不同的環境中。當然&#xff0c;前兩者對所有系統都很重要。就PC軟件而言&#xff0c;鑒于操作系統、共存和互操作應用程序、硬件、帶寬可用性等方面的快速變化&#xff0…

抖店如何運營?新手應該怎么做?從入門到精通詳細講解!

我是電商珠珠 做抖店必須先搞懂它的基礎流程&#xff0c;流程搞懂了&#xff0c;才能有進一步的可能。不要急功近利&#xff0c;想要一口吃個胖子&#xff0c;這樣做就會直接造成店鋪被清店&#xff0c;扣除保證金&#xff0c;甚至還會埋怨自己沒用。 我做電商已經三年多的時…

vue3 日期延后一天

問題&#xff1a;提交信息時要求將所選日期延后一天進行提交解決過程&#xff1a;1.定義延后一天的計算方法&#xff0c;在提交前&#xff0c;將提交日期傳入調用該方法 2.對延后的日期進行格式化&#xff0c;最后格式為yy-mm-dd解決結果&#xff1a; const…

c++ - pointer convert - class member function‘s pointer <==> void*

文章目錄 c - pointer convert - class member functions pointer <> void*概述筆記END c - pointer convert - class member function’s pointer <> void* 概述 想將結構體中的void指針賦值為類成員函數的指針, 用于回調. 這個結構體相關的函數寫完, 就不用再因…

Stable Diffusion中的Clip模型

基礎介紹 Stable Diffusion 是一個文本到圖像的生成模型&#xff0c;它能夠根據用戶輸入的文本提示&#xff08;prompt&#xff09;生成相應的圖像。在這個模型中&#xff0c;CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型扮演了一個關鍵的角色&a…