Maison >Java >javaDidacticiel >Quels sont les moyens d'obtenir des beans dans Spring Boot ?

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

WBOY
WBOYavant
2023-05-12 15:22:061976parcourir

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

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

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

Méthode d'appel

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer