Spring 簡單的讀取和儲存物件
取得Bean 物件(物件組裝)
取得bean 物件也叫做物件裝配,是把物件取出來放到某個類中,有時候也叫對象註⼊。
物件組裝(物件注入)的實作方法以下3 種:
#屬性注入
建構方法注入
Setter 注入
我們先建立以下幾個套件和幾個類別:
屬性注入
屬性註⼊是使⽤ @Autowired
實現的,將Service 類別註⼊到 Controller
類別中.
@Controller public class StudentController { // 1.使用属性注入的方式获取 Bean @Autowired private StudentService studentService; public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
優點:
實作簡單, 使用簡單.
# 缺點:
- ##功能性問題: 不能注入不可變(
final
) 物件.
#在Java 中final 物件(不可變)要嘛直接賦值,要嘛在構造方法中賦值,所以當使用屬性注入final 物件時,它不符合Java 中final 的使用規範,所以就不能注入成功了。
- 通用性問題: 只能適應於
IoC
容器.
- 設計原則問題: 更容易違反單一設計原則. (針對物件是類別)
單一設計原則:建構方法注入從
- 針對於類別層級
- 針對於方法層級
Spring 4.x 之後, Spring 官方建議使用建構方法注入的形式.
@Controller public class StudentController { // 2.构造方法注入 private StudentService studentService; // @Autowired 可省略 @Autowired public StudentController(StudentService studentService) { this.studentService = studentService; } public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
# 注意
##@Autowired
可省略.
- 但是如果類別中有多個建構⽅法,那麼需要加入
@Autowired
來明確指定到底使⽤哪個建構⽅法,否則程序會報錯.
優點:
- #可注入不可變物件.
- 注入物件不會被修改.
- 加上了
final
修飾符.
- 建構方法是隨著類別載入只執行一次的.
- #注入物件會被完全初始化。(使用建構方法帶來的優點)
- 通用性更好.
Setter 注入
注⼊和屬性的Setter ⽅法實作類似,只不過在設定set ⽅法的時候需要加上@Autowired
註解.
@Controller public class StudentController { // 3.setter 注入 private StudentService studentService; @Autowired public void setStudentService(StudentService studentService) { this.studentService = studentService; } public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
優點:
更符合單一設計原則. (針對物件是方法層級)
#缺點:
- 不能注入不可變物件( final
##注入的物件可被修改.
set
方法是普通set 方法, 可以被重複呼叫, 有被修改的風險. 小結: 日常開發當中, 使用屬性注入實作更簡單的讀取Bean, 還是主流的實作方式.-
@Resource 關鍵字
在進⾏類別註⼊時,除了可以使⽤ @Autowired 關鍵字之外,我們還可以使⽤ @Resource 進⾏注⼊. @Controller public class StudentController { @Resource private StudentService studentService; public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
@Autowired和@Resource 的區別
###不同點:############功能支援不同: @Autowired支援屬性注入, setter 注入, 建構方法注入; @Resource 只支援屬性注入和setter 注入, 不支援建構方法注入.############出身不同: @Autowired 來自於Spring 框架; 而@Resource 來自於JDK.############參數支援不同: @Resource 支援更多的參數設定; 而 @Autowired 只支援required 參數.############ #同⼀類型多個@Bean 報錯處理######當出現以下多個Bean,傳回同⼀物件類型時程式會報錯##############此時我們運行:###相同點: 都是用來實現依賴注入的.
public class App { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml"); StudentController studentController = applicationContext.getBean("studentController", StudentController.class); studentController.func(); } }
#### 注意# 會報錯, 報錯的原因是,非唯一的Bean 物件。 ######同⼀類型多個Bean 報錯處理######解決同⼀個類型,多個Bean 的解⽅案有以下兩個:############使⽤ ###@Resource(name="student1")### 定義.############使⽤ ###@Qualifier###註解定義名稱.###
#
使⽤ @Resource(name="student1")
定义.
@Controller public class StudentController { @Resource(name = "student2") private Student student; public void func() { System.out.println(student.toString()); } }
#
使⽤ @Qualifier
注解定义名称.
@Controller public class StudentController { @Resource @Qualifier("student2") private Student student; public void func() { System.out.println(student.toString()); } }
#
如果我们想用 @Autowired
可以写成:
@Autowired private Student student1; // 存在有耦合性问题
以上是Java之Spring簡單讀取和儲存物件的方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器