提及來開始進行面試是年前倒數第二週,上午9點,我還在去公司的公交上,忽然收到螞蟻的面試電話,其實算不上真正的面試。面試官只是和我聊了下他們在作的事情(主要是作雙十一這裏大促的穩定性保障,偏中間件吧),說的很詳細,而後和我溝通了下是否有興趣,我表示有興趣,後面就收到正式面試的通知,最後沒選擇去螞蟻表示抱歉。java
不一樣版本的 Spring Framework 有哪些主要功能? VersionFeatureSpring 2.5發佈於 2007 年。這是第一個支持註解的版本。Spring 3.0發佈於 2009 年。它徹底利用了 Java5 中的改進,併爲 JEE6 提供了支持。Spring 4.0發佈於 2013 年。這是第一個徹底支持 JAVA8 的版本。git
什麼是 Spring Framework?github
列舉 Spring Framework 的優勢。web
Spring Framework 有哪些不一樣的功能?面試
Spring Framework 中有多少個模塊,它們分別是什麼?spring
什麼是 Spring 配置文件?數據庫
Spring 配置文件是 XML 文件。該文件主要包含類信息。它描述了這些類是如何配置以及相互引入的。可是,XML 配置文件冗長且更加乾淨。若是沒有正確規劃和編寫,那麼在大項目中管理變得很是困難。編程
Spring 應用程序有哪些不一樣組件?bash
Spring 應用通常有如下組件:session
使用 Spring 有哪些方式?
使用 Spring 有如下方式:
什麼是 Spring IOC 容器?
Spring 框架的核心是 Spring 容器。容器建立對象,將它們裝配在一塊兒,配置它們並管理它們的完整生命週期。Spring 容器使用依賴注入來管理組成應用程序的組件。容器經過讀取提供的配置元數據來接收對象進行實例化,配置和組裝的指令。該元數據能夠經過 XML,Java 註解或 Java 代碼提供。
在依賴注入中,您沒必要建立對象,但必須描述如何建立它們。您不是直接在代碼中將組件和服務鏈接在一塊兒,而是描述配置文件中哪些組件須要哪些服務。由 IoC 容器將它們裝配在一塊兒。
能夠經過多少種方式完成依賴注入?
一般,依賴注入能夠經過三種方式完成,即:
區分構造函數注入和 setter 注入。
構造函數注入setter 注入沒有部分注入有部分注入不會覆蓋 setter 屬性會覆蓋 setter 屬性任意修改都會建立一個新實例任意修改不會建立一個新實例適用於設置不少屬性適用於設置少許屬性
spring 中有多少種 IOC 容器?
區分 BeanFactory 和 ApplicationContext。
BeanFactoryApplicationContext它使用懶加載它使用即時加載它使用語法顯式提供資源對象它本身建立和管理資源對象不支持國際化支持國際化不支持基於依賴的註解支持基於依賴的註解
列舉 IoC 的一些好處。
IoC 的一些好處是:
Spring IoC 的實現機制。
Spring 中的 IoC 的實現原理就是工廠模式加反射機制。
示例:
interface Fruit {
public abstract void eat();
}
class Apple implements Fruit {
public void eat(){
System.out.println("Apple");
}
}
class Orange implements Fruit {
public void eat(){
System.out.println("Orange");
}
}
class Factory {
public static Fruit getInstance(String ClassName) {
Fruit f=null;
try {
f=(Fruit)Class.forName(ClassName).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
class Client {
public static void main(String[] a) {
Fruit f=Factory.getInstance("io.github.dunwu.spring.Apple");
if(f!=null){
f.eat();
}
}
}
複製代碼
什麼是 spring bean?
spring 提供了哪些配置方式?
bean 所需的依賴項和服務在 XML 格式的配置文件中指定。這些配置文件一般包含許多 bean 定義和特定於應用程序的配置選項。它們一般以 bean 標籤開頭。例如:
<bean id="studentbean" class="org.edureka.firstSpring.StudentBean">
<property name="name" value="Edureka"></property>
</bean>
複製代碼
您能夠經過在相關的類,方法或字段聲明上使用註解,將 bean 配置爲組件類自己,而不是使用 XML 來描述 bean 裝配。默認狀況下,Spring 容器中未打開註解裝配。所以,您須要在使用它以前在 Spring 配置文件中啓用它。例如:
<beans>
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>
複製代碼
Spring 的 Java 配置是經過使用 @Bean 和 @Configuration 來實現。
例如:
@Configuration
public class StudentConfig {
@Bean
public StudentBean myStudent() {
return new StudentBean();
}
}
複製代碼
spring 支持集中 bean scope?
Spring bean 支持 5 種 scope:
僅當用戶使用支持 Web 的 ApplicationContext 時,最後三個纔可用。
spring bean 容器的生命週期是什麼樣的?
spring bean 容器的生命週期流程以下:
什麼是 spring 的內部 bean?
只有將 bean 用做另外一個 bean 的屬性時,才能將 bean 聲明爲內部 bean。爲了定義 bean,Spring 的基於 XML 的配置元數據在 或 中提供了 元素的使用。內部 bean 老是匿名的,它們老是做爲原型。
例如,假設咱們有一個 Student 類,其中引用了 Person 類。這裏咱們將只建立一個 Person 類實例並在 Student 中使用它。
Student.java
public class Student {
private Person person;
//Setters and Getters
}
public class Person {
private String name;
private String address;
//Setters and Getters
}
複製代碼
bean.xml
<bean id=「StudentBean" class="com.edureka.Student"> <property name="person"> <!--This is inner bean --> <bean class="com.edureka.Person"> <property name="name" value=「Scott"></property>
<property name="address" value=「Bangalore"></property> </bean> </property> </bean> 複製代碼
什麼是 spring 裝配
當 bean 在 Spring 容器中組合在一塊兒時,它被稱爲裝配或 bean 裝配。Spring 容器須要知道須要什麼 bean 以及容器應該如何使用依賴注入來將 bean 綁定在一塊兒,同時裝配 bean。
自動裝配有哪些方式?
Spring 容器可以自動裝配 bean。也就是說,能夠經過檢查 BeanFactory 的內容讓 Spring 自動解析 bean 的協做者。
自動裝配的不一樣模式:
自動裝配有什麼侷限?
你用過哪些重要的 Spring 註解?
如何在 spring 中啓動註解裝配?
默認狀況下,Spring 容器中未打開註解裝配。所以,要使用基於註解裝配,咱們必須經過配置<context:annotation-config /> 元素在 Spring 配置文件中啓用它。
@Component, @Controller, @Repository, @Service 有何區別?
@Required 註解有什麼用?
@Required 應用於 bean 屬性 setter 方法。此註解僅指示必須在配置時使用 bean 定義中的顯式屬性值或使用自動裝配填充受影響的 bean 屬性。若是還沒有填充受影響的 bean 屬性,則容器將拋出 BeanInitializationException。
示例:
public class Employee {
private String name;
@Required
public void setName(String name){
this.name=name;
}
public string getName(){
return name;
}
}
複製代碼
@Autowired 註解有什麼用?
@Autowired 能夠更準確地控制應該在何處以及如何進行自動裝配。此註解用於在 setter 方法,構造函數,具備任意名稱或多個參數的屬性或方法上自動裝配 bean。默認狀況下,它是類型驅動的注入。
public class Employee {
private String name;
@Autowired
public void setName(String name) {
this.name=name;
}
public string getName(){
return name;
}
}
複製代碼
@Qualifier 註解有什麼用?
當您建立多個相同類型的 bean 並但願僅使用屬性裝配其中一個 bean 時,您可使用@Qualifier 註解和 @Autowired 經過指定應該裝配哪一個確切的 bean 來消除歧義。
例如,這裏咱們分別有兩個類,Employee 和 EmpAccount。在 EmpAccount 中,使用@Qualifier 指定了必須裝配 id 爲 emp1 的 bean。
Employee.java
public class Employee {
private String name;
@Autowired
public void setName(String name) {
this.name=name;
}
public string getName() {
return name;
}
}
複製代碼
EmpAccount.java
public class EmpAccount {
private Employee emp;
@Autowired
@Qualifier(emp1)
public void showName() {
System.out.println(「Employee name : 」+emp.getName);
}
}
複製代碼
@RequestMapping 註解有什麼用?
@RequestMapping 註解用於將特定HTTP請求方法映射到將處理相應請求的控制器中的特定類/方法。此註解可應用於兩個級別: