Kita semua tahu apabila menggunakan rangka kerja spring bahawa jika kelas menggunakan @Service, @Autowire, kaedah suntikan kebergantungan ini merujuk kepada objek lain, dalam kelas lain, kelas ini hanya boleh diperolehi melalui pemberat IOC spring Hanya apabila ada contohnya, objek bergantung boleh dimulakan dengan betul, jika tidak, objek bergantung adalah batal.
Jadi ada persoalan, bagaimana nak dapatkan kacang dalam bekas spring ioc (spring managed beans) di kelas biasa.
Kita semua tahu bahawa objek konteks ApplicationContext pada musim bunga adalah asas untuk mendapatkan kacang.
Dalam but spring, kita boleh mendapatkan kacang dalam tiga cara berikut.
Anotasi PostConstruct digunakan pada kaedah yang perlu dilaksanakan selepas suntikan kebergantungan selesai untuk melaksanakan sebarang pemula. Kaedah ini mesti dipanggil sebelum meletakkan kelas ke dalam perkhidmatan.
Semua kelas yang menyokong suntikan pergantungan mesti menyokong anotasi ini. Kaedah yang dianotasi dengan PostConstruct mesti dipanggil walaupun kelas tidak meminta sebarang sumber untuk disuntik. Hanya satu kaedah boleh dianotasi dengan anotasi ini.
Kaedah yang menggunakan anotasi PostConstruct mesti mematuhi semua piawaian berikut:
Kaedah tidak boleh mempunyai sebarang parameter, kecuali dalam kes pemintas EJB, seperti yang ditakrifkan oleh spesifikasi EJB. Dalam kes ini, ia akan mempunyai objek InvocationContext;
Jenis pemulangan kaedah ini mesti terbatal
Kaedah ini tidak boleh membuang pengecualian yang ditandakan; atau peribadi;
Kaedah tidak boleh statik kecuali untuk klien aplikasi; EJB yang boleh mengendalikan pengecualian dan pulih daripadanya.
Kaedah 2 Kelas permulaan ApplicationContext
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * @author: clx * @version: 1.1.0 */ @SpringBootApplication public class Application { public static ConfigurableApplicationContext ac; public static void main(String[] args) { ac = SpringApplication.run(Application.class, args); } }
/** * @author: clx * @version: 1.1.0 */ @RestController public class TestController { /** * 方式二 */ @GetMapping("test2") public void method_2() { AutoMethodDemoService methodDemoService = Application.ac.getBean(AutoMethodDemoService.class); String test2 = methodDemoService.test2(); System.out.println(test2); } }Kaedah 3 Menyuntik Konteks Aplikasi
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * springboot静态方法获取 bean 的三种方式(三) * @author: clx * @version: 1.1.0 */ @Component public class StaticMethodGetBean_3<T> implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { StaticMethodGetBean_3.applicationContext = applicationContext; } public static <T> T getBean(Class<T> clazz) { return applicationContext != null?applicationContext.getBean(clazz):null; } }Kaedah panggilan secara manual
/** * 方式三 */ @Test public void method_3() { AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class); String test3 = autoMethodDemoService.test3(); System.out.println(test3); }
Atas ialah kandungan terperinci Apakah cara untuk mendapatkan kacang dalam Spring Boot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!