天天看點

Spring面試題

什麼是Spring

Spring是一個輕量級的容器,他實作了IOC和非侵入的架構,并提供了AOP的實作方式,提供了持久層事務的支援,其讓java開發子產品化,并且貫穿持久層,邏輯層,表現層,讓每一個子產品都可以獨立分開,降低耦合,提高代碼複用率.

2. Spring的好處

Spring提供了IOC和DI,将管理和維護對象的工作交給了Spring

Spring比較輕量級

Spring并不排斥其他架構,是以其他架構和Spring整合變得很容易

Spring提供了SpringMVC

Spring提供了便捷的事務控制

3. SpringIOC和DI

IOC是将維護對象和建立對象的工作交給Spring,而不用我們自己去建立和維護

DI是注入對象中所需要的屬性

4. DI的三種方式

構造方法

set方法

接口

5. BeanFactory 和ApplicationContext的差別

首先BeanFactory和ApplicationContext都是接口,并且ApplicationContext是BeanFactory的子接口。

其次BeanFactory是Spring中最底層的接口,提供了最簡單的容器的功能,隻提供了執行個體化對象和拿對象的功能

ApplicationContext(應用上下文)它是Spring的一個更進階的容器,提供了更多的有用的功能,ApplicationContext繼承了BeanFactory接口,是以,ApplicationContext也能像BeanFactory從容器中得到Bean(繼承至 ListableBeanFactory).

加載方式不同,BeanFactory采用的是延遲加載的形式來注入Bean,即隻有在使用某個bean的時候,才對該Bean進行加載執行個體化.

ApplicationContext則相反的,它是在Ioc容易啟動時就一次性建立所有的Bean,

6. 常見的ApplicationContext的實作方式

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

XmlWebApplicationContext

7. SpringBean的作用域

Singleton 單例

Prototype 多例

Request request生命周期内

Session session生命周期内

global-session

8. 注解的方式配置Bean

在spring配置檔案中設定<code>&lt;context:annotation-config/&gt;</code>

@Autowired 按照類型進行比對

@Qualifier("student") 按照id進行比對

@Resource(name="student") // 有參數 用參數和id做比對,如果沒有則先用變量名和id,再用類型比對

9. 預設一個bean是在Spring容器初始化加載,如果設定lazy-init或者為其他作用域,則會在使用到bean的時候初始化(init ,destory)

10. 什麼是Spring inner beans

即Spring内部Bean,在一個Bean的内部定義另一個Bean

11. Spring事件(5種)

上下文更新事件(ContextRefreshedEvent):該事件會在ApplicationContext被初始化或者更新時釋出,也可以在調用ConfigurableApplicationContext接口中的refresh()方法時被觸發。

上下文開始事件(ContextStartedEvent): 當容器調用ConfigurableApplicationContext的Start()方法開始/重新開始容器時被觸發。

上下文停止事件(ContextStoppedEvent): 當容器調用ConfigurableApplicationContext的Stop()方法停止容器時觸發該事件。

上下文關閉事件(ContextClosedEvent): 當ApplicationContext被關閉時觸發該事件。容器被關閉時,其管理的所有單例Bean都被銷毀。

請求處理事件(RequestHandledEvent): 在Web應用中,當一個http請求(request)結束觸發該事件。

允許使用者自定義事件,繼承ApplicationEvent,并且還要建立一個監聽器

12. 用到了那些設計模式

代理模式—在AOP和remoting中被用的比較多。

單例模式—在spring配置檔案中定義的bean預設為單例模式

模闆方法—用來解決代碼重複的問題。

前端控制器—Spring提供了DispatcherServlet來對請求進行分發。

工廠模式—BeanFactory用來建立對象的執行個體。

依賴注入—貫穿于BeanFactory / ApplicationContext接口的核心理念。

視圖幫助(View Helper )

13. aop

将通用的代碼從業務中分離出來,簡化代碼.使用的為jdk代理和cglib代理

連接配接點 : 在方法的執行前後和抛出異常可以作為連接配接點,即将增強和目标方法連接配接的地方.

切入點 : 在某個方法被調用的時候,這個方法上的連接配接點變為切入點

增強 : 目标方法除了核心業務以外的所需要的方法, 比如在save()方法中,save()為核心方法,開啟事務為非核心方法,可以抽離出來, 在AOP中開啟事務就叫做增強

切面 : 除了目标方法所在的類以外其他的類

代理 : 将目标方法和增強結合在一起

織入 : 生成代理類的過程

14. 事務

Spring内置了事務管理器,配置一下就好

有配置式和聲明式兩種方法