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

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

WBOY
WBOYnach vorne
2023-05-12 15:22:061957Durchsuche

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

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

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

Aufrufende Methode

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen