1. 程式人生 > >面試中的談談對spring的理解

面試中的談談對spring的理解

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

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支援使用者自定義切面。

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;
    }
}
2018-08-21 11:07:22.906  INFO 10392 --- [nio-8088-exec-1] a.s.s.m.AbstractValidatingSessionManager : Enabling session validation scheduler...
2018-08-21 11:07:22.987  INFO 10392 --- [nio-8088-exec-1] c.e.h.controller.ControllerInterceptor   : interceptor ***************************
2018-08-21 11:07:22.987  INFO 10392 --- [nio-8088-exec-1] c.e.h.controller.ControllerInterceptor   : methodName: loginIn

3.spring 的優缺點

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

它具備以下優點:

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

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

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

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

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

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

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

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