Mendapatkan objek kacang juga dipanggil pemasangan objek, iaitu mengeluarkan objek dan meletakkannya di suatu tempat Dalam kelas, ia kadang-kadang dipanggil suntikan objek.
Terdapat tiga cara untuk melaksanakan pemasangan objek (suntikan objek):
Suntikan harta benda
Kaedah pembinaan Inject
Setter Inject
Kami mula-mula mencipta pakej dan kelas berikut:
Suntikan atribut dilaksanakan menggunakan @Autowired
, menyuntik kelas Perkhidmatan ke dalam kelas Controller
@Controller public class StudentController { // 1.使用属性注入的方式获取 Bean @Autowired private StudentService studentService; public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
Kelebihan: <. 🎜>Mudah untuk dilaksanakan dan mudah digunakan.
Kelemahan: final
IoC
Untuk peringkat kelas
Suntikan kaedah pembina- Untuk tahap kaedah
Spring 4.x
@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
Objek tidak berubah boleh suntikan.
final
Tiada suntikan atribut, pelaksanaan mudah.
Suntikan penetapSetter
@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(); } }
lebih banyak. konsisten dengan Prinsip reka bentuk tunggal. (Tahap kaedah untuk objek)
Kelemahan:
tidak boleh menyuntik objek tidak berubah (
final
set
Ringkasan: Dalam pembangunan harian, menggunakan suntikan atribut untuk mencapai bacaan kacang yang lebih mudah masih merupakan kaedah pelaksanaan arus perdana.
@Resource keyword
Perbezaan antara @Autowired dan @Resource
@Controller public class StudentController { @Resource private StudentService studentService; public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
Sokongan fungsi yang berbeza: @ Autowired menyokong suntikan hartanah, suntikan penetap dan suntikan pembina; @Resource hanya menyokong suntikan hartanah dan suntikan penetap dan tidak menyokong suntikan pembina.
Pada ketika ini kami menjalankan:
# Nota# Ralat akan dilaporkan Sebab ralat itu ialah objek Bean yang tidak unik.
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(); } }
@Resource(name="student1")
#
使⽤ @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; // 存在有耦合性问题
Atas ialah kandungan terperinci Apakah cara mudah Spring untuk membaca dan menyimpan objek dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!