Heim > Java > javaLernprogramm > Welche Möglichkeiten gibt es, Bohnen in Spring Boot zu erhalten?

Welche Möglichkeiten gibt es, Bohnen in Spring Boot zu erhalten?

WBOY
Freigeben: 2023-05-12 15:22:06
nach vorne
1987 Leute haben es durchsucht

Bei der Verwendung des Spring-Frameworks wissen wir alle, dass, wenn eine Klasse @Service, @Autowire verwendet, diese Abhängigkeitsinjektionsmethode auf andere Objekte verweist. In einer anderen Klasse kann die Instanz dieser Klasse nur über das IOC-Gewicht von Spring, den abhängigen Objekten, abgerufen werden kann korrekt initialisiert werden, andernfalls sind die abhängigen Objekte null.

Es stellt sich also die Frage, wie man in normalen Klassen die Bohnen in den Spring IOC-Container (Spring Managed Beans) bekommt.

Wir alle wissen, dass das Kontextobjekt ApplicationContext die Grundlage für den Erhalt von Bohnen im Frühjahr ist.

Im Spring Boot können wir Bohnen auf die folgenden drei Arten erhalten.

Methode 1-Annotation @PostConstruct

Welche Möglichkeiten gibt es, Bohnen in Spring Boot zu erhalten?

PostConstruct-Annotation wird für Methoden verwendet, die nach Abschluss der Abhängigkeitsinjektion ausgeführt werden müssen, um eine Initialisierung durchzuführen. Diese Methode muss aufgerufen werden, bevor die Klasse in den Dienst gestellt wird.

Alle Klassen, die die Abhängigkeitsinjektion unterstützen, müssen diese Annotation unterstützen. Mit PostConstruct annotierte Methoden müssen auch dann aufgerufen werden, wenn die Klasse keine einzuschleusenden Ressourcen anfordert. Mit dieser Annotation kann nur eine Methode annotiert werden.

Methoden, die die PostConstruct-Annotation anwenden, müssen allen folgenden Standards entsprechen:

Die Methode darf keine Parameter haben, außer im Fall eines EJB-Interceptors. In diesem Fall verfügt sie über ein InvocationContext-Objekt.
Der Rückgabetyp von Diese Methode muss ungültig sein.
Die Methode, die PostConstruct anwendet, kann öffentlich, geschützt, paketprivat oder privat sein.
Die Methode darf nicht statisch sein Methode kann endgültig sein;
Wenn die Methode eine ungeprüfte Ausnahme auslöst, darf die Klasse nicht in einen Dienst eingefügt werden, es sei denn, es handelt sich um ein EJB, das die Ausnahme verarbeiten und von ihr wiederherstellen kann.

Methode 2 Startklasse ApplicationContext

Implementierungsmethode: Definieren Sie in der Springboot-Startklasse die statische Variable ApplicationContext und verwenden Sie die getBean-Methode des Containers, um abhängige Objekte abzurufen.

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);
    }
 
}
Nach dem Login kopieren

Aufrufende Methode

/**
 * @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);
    }
}
Nach dem Login kopieren

Methode 3 ApplicationContext manuell einfügen

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;
    }
}
Nach dem Login kopieren

Aufrufende Methode

/**
 * 方式三
 */
@Test
public void method_3() {
    AutoMethodDemoService autoMethodDemoService = StaticMethodGetBean_3.getBean(AutoMethodDemoService.class);
    String test3 = autoMethodDemoService.test3();
    System.out.println(test3);
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWelche Möglichkeiten gibt es, Bohnen in Spring Boot zu erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage