取得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(); } }
優點:
更符合單一設計原則. (針對物件是方法層級)
#缺點:
##注入的物件可被修改.
set
方法是普通set 方法, 可以被重複呼叫, 有被修改的風險. 小結: 日常開發當中, 使用屬性注入實作更簡單的讀取Bean, 還是主流的實作方式.@Resource 關鍵字
@Controller public class StudentController { @Resource private StudentService studentService; public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
@Autowired和@Resource 的區別相同點: 都是用來實現依賴注入的.
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中文網其他相關文章!