面試中的談談對spring的理解


轉載自:https://www.matools.com/blog/190195945

回答面試題一般都是要講邏輯的,我將從以下三個方面總結以下:

1.spring的工作原理

2.spring的核心技術

3.spring的優缺點

1.spring的工作原理

spring
是按照設計模式精心打造的,它實現了工廠模式的工廠類,這個類名為BeanFactory(接口),在程序中通常使用它的子類ApplicationContext(也是接口)。


spring的核心是IOC(反轉控制)容器,IOC也是一種編程思想,用於實現模塊之間的解耦,在Spring中它的作用是對對象的創建,維護和銷毀等生命周期的控制。IOC:把對象的創建、初始化、銷毀交給spring來管理,而不是由開發者控制,實現控制反轉。

spring是一個大的工廠類,spring的特點就是基於配置,在其配置文件中通過<bean>元素來創建實例對象。


根據業務邏輯來看,對象經常不是獨立的,一個對象的創建往往涉及另一個對象的創建,當然這個對象也要由IOC容器負責,負責的方式就是依賴注入DI,通過反射機制實現。有三種注入方式:(1)接口注入(2)構造器注入(3)Setter方法注入。

2.spring的核心技術

spring的核心技術有:IOC,AOP

java 的 高級特性:反射機制,代理


AOP:面向切面編程,系統中有很多各不相干的類的方法,在這眾多方法中加入某種系統功能的代碼,如加入日志,權限判斷等,AOP可以實現橫切關注點(如日志,安全,緩存和事務管理)與他們所影響的對象之間的解耦。

實現AOP 功能采用的是代理技術,調用代理類,代理類與目標類具有相同的方法聲明。

AOP 在spring中主要表現在兩個方面:提供聲明式的事務管理   、spring支持用戶自定義切面。

spring AOP的使用在另外一位同學的博客中可以看到,我不喜歡造輪子就直接給大家貼一個路徑吧
https://www.cnblogs.com/flowwind/p/4782606.html
<https://www.cnblogs.com/flowwind/p/4782606.html>

AOP主要包括通知(Advice)切點(PointCut)連接點(JoinPoint)

下面貼一段在springboot 中使用AOP的代碼

<!-- aop --> 
<dependency> 
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId> 
</dependency> 

@Aspect
@Component public class ControllerInterceptor { 
private final Logger logger =LogManager.getLogger(this.getClass()); 

@Pointcut("execution(public *com.example.homework.controller..*(..))") 
public void controllerMethodPointcut(){

} 

@Before("controllerMethodPointcut()") //指定攔截器規則
public Object interceptor(JoinPoint jp){ 
      MethodSignature signature =(MethodSignature) jp.getSignature(); 
      Method method = signature.getMethod();//獲取被攔截的方法 String methodName = method.getName(); //獲取被攔截的方法名
      logger.info("interceptor ***************************");
      logger.info("methodName: "+methodName); return null; 
   } 
} 

3.spring 的優缺點

Spring
的核心概念是IOC和AOP,這兩個核心服務的對象算是bean(POJO),定位是一個輕量級的框架,但是隨着他的發展變得很龐大,我們稱它為spring 全家桶。

它具備以下優點:

spring中避免了關鍵字new造成的耦合問題。

spring本身就是一個工廠,不需要再編寫工廠類了。

spring不需要進行明確的引用關系的傳遞,直接通過配置完成

所有框架幾乎都可以在spring中整合在一起使用。

spring編程=factory設計模式+proxy設計模式

當然,它的缺點也是不少的:

spring基於大量的xml 配置文件,使得我們花了大量的時間放在配置上,拖慢了開發的進度,springboot 問世后,提倡代碼優於配置解決了這個問題。

spring
的內容太龐大,隨便打斷點查看的時候會出現十幾二十層代碼,閱覽性不強,在實際開發的過程中spring的角色更像是膠水一樣,充當整合各種技術的角色,同時作為bean的容器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM