首先,解釋下什麼是基於註解的容器配置?
不使用 XML 來描述 bean 裝配,開發人員通過在相關的類,方法或字段聲明上使用註解將配置移動到組件類本身。它可以作爲 XML 設置的替代方案。例如:
Spring 的 Java 配置是通過使用 @Bean 和 @Configuration 來實現。
@Bean 註解扮演與 元素相同的角色。
@Configuration 類允許通過簡單地調用同一個類中的其他 @Bean 方法來定義 bean 間依賴關係。
例如:
@Configuration
public class StudentConfig {
@Bean
public StudentBean myStudent() {
return new StudentBean();
}
}
那麼,我們又如何在 spring 中啓動註解裝配?
方法很簡單,默認情況下,Spring 容器中未打開註解裝配。因此,要使用基於註解裝配,我們必須通過配置元素在 Spring 配置文件中啓用它。
然而,@Component, @Controller, @Repository, @Service 有何區別?
1)@Component:這將 java 類標記爲 bean。它是任何 Spring 管理組件的通用構造型。spring 的組件掃描機制現在可以將其拾取並將其拉入應用程序環境中。
2)@Controller:這將一個類標記爲 Spring Web MVC 控制器。標有它的 Bean 會自動導入到 IoC 容器中。
3)@Service:此註解是組件註解的特化。它不會對 @Component 註解提供任何其他行爲。您可以在服務層類中使用 @Service 而不是 @Component,因爲它以更好的方式指定了意圖。
4)@Repository:這個註解是具有類似用途和功能的 @Component 註解的特化。它爲 DAO 提供了額外的好處。它將 DAO 導入 IoC 容器,並使未經檢查的異常有資格轉換爲 Spring DataAccessException。
接下來,說下 @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 請求方法映射到將處理相應請求的控制器中的特定類/方法。此註釋可應用於兩個級別:
類級別:映射請求的 URL
方- 法級別:映射 URL 以及 HTTP 請求方法