Maison >Java >javaDidacticiel >Analyse détaillée Java de la portée du Bean

Analyse détaillée Java de la portée du Bean

WBOY
WBOYavant
2022-08-31 17:28:041505parcourir

Cet article vous apporte des connaissances pertinentes sur java Le framework Spring est un conteneur IoC qui gère Bean, donc Bean est naturellement une ressource importante dans Spring. Alors, que signifie la portée de Bean ? Combien y a-t-il de types ? Jetons-y un coup d'œil ensemble, j'espère que cela sera utile à tout le monde.

Analyse détaillée Java de la portée du Bean

Étude recommandée : "Tutoriel vidéo Java"

Le framework Spring est un conteneur IoC qui gère les beans, les beans sont donc naturellement des ressources importantes au Spring. Alors, que signifie la portée des beans ? Combien y a-t-il de types ? Jetons un coup d'œil ensuite.

PS : Les classes publiques en Java peuvent être appelées Beans ou Java Beans.

1. Scope

La portée d'un Bean fait référence à un certain mode de comportement du Bean dans l'ensemble du framework Spring. Par exemple, la portée singleton signifie qu'il n'y a qu'une seule copie du Bean dans tout le Spring et qu'elle est partagée globalement. Lorsque quelqu'un modifie la valeur, ce qu'une autre personne lit est la valeur modifiée.

Par exemple, nous définissons un utilisateur d'objet Bean singleton dans Spring (la portée par défaut est singleton). Le code d'implémentation spécifique est le suivant :

@Component
public class UserBean {
    @Bean
    public User user() {
        User user = new User();
        user.setId(1);
        user.setName("Java"); // 此行为重点:用户名称为 Java
        return user;
    }
}

Ensuite, nous utilisons et modifions l'objet utilisateur dans la classe A, Le code d'implémentation spécifique. est le suivant :

@Controller
public class AController {
    @Autowired
    private User user;
    public User getUser() {
        User user = user;
        user.setName("MySQL"); // 此行为重点:将 user 名称修改了
        return user;
    }
}

Enfin, l'objet utilisateur est également utilisé dans la classe B. Le code d'implémentation spécifique est le suivant :

@Controller
public class BController {
    @Autowired
    private User user;
    public User getUser() {
        User user = user;
        return user;
    }
}

A ce moment, lorsque nous accédons à la méthode getUser dans l'objet B, nous constaterons que le Le nom d'utilisateur à l'heure actuelle est de classe A. "MySQL" est modifié en "MySQL" au lieu du "Java" d'origine, ce qui signifie que l'utilisateur de l'objet Bean utilise par défaut la portée singleton. Si cet objet singleton est modifié n'importe où, les autres classes obtiendront une valeur modifiée lorsqu'elles seront à nouveau appelées.

2. Classification de la portée

Au Spring, il existe cinq portées courantes de Bean :

  • singleton : portée singleton ;
  • prototype : portée du prototype (portée à cas multiples) ; Portée de la session ;
  • application : Portée mondiale.
  • Remarque : les trois dernières portées ne sont applicables qu'au framework Spring MVC.

2.1 singletonDescription officielle : (par défaut) Étend une seule définition de bean à une seule instance d'objet pour chaque conteneur Spring IoC.

Description : Il n'y a qu'une seule instance du Bean sous cette portée dans le conteneur IoC : Get le Bean (c'est-à-dire obtenu via applicationContext.getBean et d'autres méthodes) et les beans d'assemblage (c'est-à-dire injectés via @Autowired) sont le même objet.

Scénario : Habituellement, les

stateless

Beans utilisent cette portée. Sans état signifie que l'état de la propriété de l'objet Bean n'a pas besoin d'être mis à jour.

Remarque : Spring sélectionne cette portée par défaut.

Prototype 2.2Description officielle : étend une définition de bean unique à un nombre quelconque d'instances d'objet.

Description : Chaque demande d'un Bean dans cette portée créera une nouvelle instance : Obtenez le Bean (c'est-à-dire via applicationContext. GetBean et d'autres méthodes) et les beans d'assemblage (c'est-à-dire injectés via @Autowired) sont de nouvelles instances d'objet.

Scénario : Habituellement, les

Beans avec état utilisent cette portée.

Requête 2.3

Description officielle : étend une définition de bean unique au cycle de vie d'une requête HTTP unique. Autrement dit, chaque requête HTTP a sa propre instance de bean créée à partir d'une définition de bean unique. contexte d'un Spring ApplicationContext compatible Web.

Description : Chaque requête HTTP créera une nouvelle instance de Bean, similaire au prototype.

Scénario : Un bean partagé de requête et de réponse Http.

Remarque : utilisation limitée dans le framework Spring MVC.

Session 2.4

Description officielle : étend une définition de bean unique au cycle de vie d'une session HTTP Uniquement valide dans le contexte d'un contexte d'application Spring compatible Web.

Description : Dans une session HTTP, définissez une instance de Bean.

Scénario : Bean partagé d'une session utilisateur, par exemple : enregistrement des informations de connexion d'un utilisateur.

Remarque : utilisation limitée dans le framework Spring MVC.

Application 2.5

Description officielle : étend une définition de bean unique au cycle de vie d'un ServletContext Uniquement valide dans le contexte d'un Spring ApplicationContext compatible Web.

Description : Dans un contexte de servlet HTTP, définissez une instance de Bean.

Scénario : Informations contextuelles des applications Web, telles que l'enregistrement des informations partagées d'une application.

Remarque : utilisation limitée dans le framework Spring MVC.

3. Paramètre de portée

Nous pouvons définir la portée du Bean via l'annotation @Scope. Il existe deux façons de la définir :

Définir directement la valeur spécifique de la portée, par exemple : @Scope("prototype". ) ;

Définissez les variables SCOPE_XXX fournies par ConfigurableBeanFactory et WebApplicationContext, telles que @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE).

Le code de réglage spécifique est le suivant :

La portée d'un Bean fait référence à un certain modèle de comportement du Bean dans l'ensemble du framework Spring. Il existe 5 portées communes de Bean : singleton (portée d'un cas unique), prototype (portée du prototype), requête (portée de la demande), session (portée de la demande), application (portée globale). Faites attention aux trois dernières fonctions. disponible dans le framework Spring MVC.

Apprentissage recommandé : "Tutoriel vidéo Java"

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