Rumah  >  Artikel  >  Java  >  Apakah cara untuk mendapatkan kacang dalam Spring Boot?

Apakah cara untuk mendapatkan kacang dalam Spring Boot?

WBOY
WBOYke hadapan
2023-05-12 15:22:061957semak imbas

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 Kaedah 1 @PostConstruct

Apakah cara untuk mendapatkan kacang dalam Spring Boot?

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

Kaedah pelaksanaan: Dalam kelas permulaan springboot, takrifkan pembolehubah statik ApplicationContext dan gunakan kaedah getBean bekas untuk mendapatkan objek bergantung.

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);
    }
 
}

Kaedah panggilan

/**
 * @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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam