Maison > Java > javaDidacticiel > le corps du texte

Quels sont les moyens d'obtenir des beans dans Spring Boot ?

WBOY
Libérer: 2023-05-12 15:22:06
avant
1962 Les gens l'ont consulté

Nous savons tous, lors de l'utilisation du framework Spring, que si une classe utilise @Service, @Autowire, cette méthode d'injection de dépendances fait référence à d'autres objets, dans une autre classe, cela ne peut être obtenu que via le poids IOC de Spring. Uniquement lorsque la classe est. une instance, les objets dépendants peuvent être correctement initialisés, sinon les objets dépendants seront nuls.

Il y a donc une question, comment obtenir les haricots dans le conteneur Spring IOC (haricots gérés au printemps) dans les classes ordinaires.

Nous savons tous que l'objet contextuel ApplicationContext au printemps est la base pour obtenir des beans.

Au Spring Boot, nous pouvons obtenir des Beans des trois manières suivantes.

Annotation de la méthode 1@PostConstruct

Quels sont les moyens dobtenir des beans dans Spring Boot ?

L'annotation PostConstruct est utilisée sur les méthodes qui doivent être exécutées une fois l'injection de dépendances terminée, pour effectuer toute initialisation. Cette méthode doit être appelée avant de placer la classe dans le service.

Toutes les classes qui prennent en charge l'injection de dépendances doivent prendre en charge cette annotation. Les méthodes annotées avec PostConstruct doivent être appelées même si la classe ne demande l'injection d'aucune ressource. Une seule méthode peut être annotée avec cette annotation.

Les méthodes appliquant l'annotation PostConstruct doivent respecter toutes les normes suivantes :

La méthode ne doit avoir aucun paramètre, sauf dans le cas d'un intercepteur EJB (intercepteur), selon à la définition de la spécification EJB, auquel cas elle aura un objet InvocationContext ;
Le type de retour de cette méthode doit être nul
Cette méthode ne doit pas lever d'exception vérifiée
Méthode qui s'applique ; PostConstruct Peut être public, protégé, package privé ou privé ;
Sauf pour les clients d'application, la méthode ne peut pas être statique
La méthode peut être finale
Si la méthode renvoie une exception non cochée ; ne doit pas être mis dans le service, sauf s'il s'agit d'un EJB capable de gérer l'exception et de s'en remettre.

Méthode 2 Classe de démarrage ApplicationContext

Méthode d'implémentation : Dans la classe de démarrage Springboot, définissez la variable statique ApplicationContext et utilisez la méthode getBean du conteneur pour obtenir l'objet dépendant.

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);
    }
 
}
Copier après la connexion

Méthode d'appel

/**
 * @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);
    }
}
Copier après la connexion

Méthode 3 Injecter manuellement ApplicationContext

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;
    }
}
Copier après la connexion

Méthode d'appel

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal