Maison  >  Article  >  Java  >  Conteneur Spring IOC

Conteneur Spring IOC

大家讲道理
大家讲道理original
2017-08-19 13:46:191493parcourir

1. Introduction à Spring Framework

Qu'est-ce que Spring ?

Spring est un framework de développement d'applications léger open source. pour simplifier le développement d'applications au niveau de l'entreprise et réduire les intrusions

Les applications IOC et AOP fournies par Spring peuvent minimiser le couplage des composants, c'est-à-dire le découplage, ce qui facilite la maintenance et les mises à niveau futures du système

Spring fournit une solution globale pour le système. En plus des fonctions qu'il fournit, les développeurs peuvent également intégrer des applications avec des frameworks et des technologies tiers et choisir librement la technologie à utiliser pour le développement

2. Gestion des conteneurs et des beans

Introduction à Spring Container

Au Spring, toute classe Java et JavaBean sont traités comme des beans. Ces beans sont gérés et appliqués. via le conteneur

Le conteneur Spring implémente les mécanismes IOC et AOP, qui peuvent simplifier la création d'objets Bean et le découplage entre les objets Bean

Le conteneur Spring a BeanFactory et ApplicationContext Type

(Qu'est-ce que javaBean : un objet Java simple et standardisé ; quand utiliser Spring : Vous pouvez l'utiliser lorsque vous avez besoin de gérer des objets javaBean. Spring est l'une des solutions de gestion d'objets les plus simples)

Instanciation du conteneur Spring<.>

ApplicationContext hérite de l'interface BeanFactory et possède davantage de méthodes de niveau entreprise. Il est recommandé d'utiliser ce type. La méthode d'instanciation est la suivante :

//Charger l'instanciation du fichier de configuration. dans le système de fichiers

String conf = "C:applicationContext.xml";

ApplicationContext ac = new FileSystemXmlApplicationContext(conf);

/ / Charger l'instanciation du fichier de configuration sous le chemin de classe du projet

String conf = "applicationContext.xml";

ApplicationContext ac = new ClassPathXmlApplicationContext(conf);

Spring L'utilisation de conteneurs

Essentiellement, BeanFactory et ApplicationContext ne sont qu'une interface d'usine de haut niveau qui maintient les définitions et les interdépendances de Bean. Grâce à BeanFactory et ApplicationContext, nous pouvons accéder à la définition du bean

Ajoutez d'abord la définition du bean dans le fichier de configuration du conteneur applicationContext.xml

Puis après avoir créé les objets conteneurs BeanFactory et ApplicationContext, appelez la méthode getBean() pour obtenir l'instance du Bean [getBean("identifier")]

Instanciation du Bean

Il existe trois façons pour le conteneur Spring de créer des objets Bean :

-Utilisez le constructeur pour instancier

(L'attribut id ou name est utilisé pour spécifier le nom du Bean et est utilisé pour trouver l'objet Bean de Spring ; la classe est utilisée pour spécifier le type du Bean et appellera automatiquement le constructeur sans paramètre pour créer l'objet)

-Utiliser la méthode d'usine statique pour instancier

(L'attribut id est utilisé pour spécifier le nom du Bean, l'attribut class est utilisé pour spécifier le type d'usine et l'attribut factory- L'attribut method est utilisé pour spécifier la méthode de création d'objets Bean dans la fabrique (méthodes qui doivent être décorées avec de la statique)

-Utilisez la méthode de fabrique d'instance pour instancier .

(l'identifiant est utilisé pour spécifier le nom du bean, l'attribut factory-bean est utilisé pour spécifier l'objet factory Bean et l'attribut factory-method est utilisé pour spécifier la méthode de création de l'objet Bean dans l'usine)

(Indiquez à Spring les règles de création d'objet, Spring vous aidera à créer des objets ; basé sur la configuration et les règles par défaut, réduisant l'écriture de code)

Nom du bean

Nom du bean :

Dans le conteneur Spring, chaque Bean doit avoir un nom ( c'est-à-dire l'identifiant). Le nom peut être spécifié en utilisant l'attribut id ou name de l'élément l'attribut id est plus petit que le nom Strict, l'unicité est requise, les caractères spéciaux tels que "/" ne sont pas autorisés

.

alias du Bean  :

est un Bean défini, et pour ajouter une autre référence de nom, vous pouvez utiliser

Portée du bean :

Conteneur à ressort dans Lors de l'instanciation d'un bean , vous pouvez créer des objets Bean avec les portées suivantes

1 Portée Singleton


dans chaque Spring IOC Une définition de bean dans le. conteneur correspond à une instance d'objet. L'élément par défaut
configure l'instance :
Ou



2. 🎜>

Une définition de bean correspond à plusieurs instances d'objet

Instance de configuration :

ou




3. requête requête signifie qu'un nouveau bean sera généré pour chaque requête HTTP, et le bean n'est valide que dans la requête HTTP en cours
Quand en utilisant request, session et global session, vous devez d'abord effectuer la configuration suivante dans le web. Ajoutez simplement le ContextListener suivant au fichier de déclaration XML web.xml de l'application web :
... org.springframework.web.context.request RequestContextListener... est un conteneur Web avant Servlet2.4, alors vous devez utiliser une implémentation de javax.servlet.Filter :
.. requestContextFilter org.springframework.web.filter.RequestContextFilter pattern>/*...

Ensuite, vous pouvez configurer la portée du bean :





4. session



La session scope signifie qu'un nouveau bean sera généré pour chaque requête HTTP, et le bean ne sera généré que lors de la requête HTTP en cours. Valide au sein de la session (dans une session HTTP, une définition de bean correspond à une instance, uniquement dans l'environnement Web).
Configuration de l'instance : Le principe de configuration de l'instance est le même que celui de la requête. Après avoir configuré le fichier de démarrage Web, vous pouvez le configurer comme suit :

5. Session globale



Dans une session HTTP globale, une définition de bean correspond à une instance, ce qui n'a de sens que dans les applications Web basées sur un portlet. La spécification du portlet définit le concept d'instance de configuration de session
globale : et le principe de l'instance de configuration de demande est le même. le fichier de démarrage Web, vous pouvez le configurer comme suit : ( La portée du Bean ci-dessus peut être spécifiée via l'attribut scope défini par )


Rappel du cycle de vie du Bean

Spécifier la méthode de rappel d'initialisation :

Spécifie la méthode de rappel de destruction, applicable uniquement aux beans en mode singleton :

L'attribut default-init-method dans l'élément de niveau supérieur peut spécifier la méthode de rappel d'initialisation pour tous les beans default- init-method = "init"> 

L'attribut default-destroy-method dans l'élément de niveau supérieur peut spécifier la méthode de rappel de destruction pour tous les >

 

Instanciation retardée du bean

Le comportement par défaut implémenté dans ApplicationContext consiste à instancier tous les beans singleton à l'avance au démarrage

Si vous ne souhaitez pas autoriser l'instanciation d'un bean singleton à l'avance lorsque ApplicationContext est initialisé, vous pouvez utiliser l'attribut lazy-init = "true" de l'élément >Un bean initialisé paresseusement sera instancié la première fois qu'il est utilisé

dans l'élément de niveau supérieur. L'attribut default-lazy-init dans le conteneur peut spécifier des fonctionnalités d'instanciation paresseuse pour tous les du conteneur

. et spécifiez les dépendances du bean

Lorsqu'un bean a une dépendance sur un autre bean, vous pouvez utiliser l'attribut depend-on de l'élément 🎜>

Lorsqu'un bean dépend de plusieurs Lorsqu'un bean a une relation de dépendance, l'attribut depend-on peut spécifier plusieurs noms de bean, séparés par des virgules

Application IOC de conteneur

Concept IOC

Le nom complet d'IOC est Inversion de Contrôle, traduit par inversion de contrôle

IOC fait référence à l'inversion de la méthode d'acquisition de ; objets dans le programme, de la nouvelle méthode originale à la création et à l'injection par un framework tiers. Les frameworks tiers spécifient généralement quelle implémentation spécifique injecter via la configuration, réduisant ainsi le couplage entre les objets IOC peut être divisé en deux types : injection de dépendances DI et recherche de dépendances selon différentes méthodes d'implémentation

Le conteneur Spring utilise DI pour implémenter le contrôle IOC. IOC est la base et le cœur du conteneur Spring

Concept DI

Le nom complet de DI est Dependency Injection, qui est traduit Injecter des dépendances

Le principe de base de DI est de connecter des objets qui fonctionnent ensemble et ont des relations via des paramètres de constructeur ou des paramètres de méthode. Par conséquent, le travail du conteneur est d'injecter ces dépendances lors de la création d'un bean

.

IOC est une idée, et DI est le principal moyen technique de réaliser IOC

DI a deux méthodes d'injection principales, à savoir l'injection Setter et l'injection constructeur

Injection Setter

Après avoir instancié un bean en appelant le constructeur sans paramètre ou la méthode de fabrique statique sans paramètre, et en appelant la méthode setter du bean, vous pouvez réaliser une injection setter

classe publique JDBCDataSource{ pilote de chaîne privé ;

public void setDriver (pilote de chaîne){ essayez{ Classe .forName(pilote );

 this.driver = driver;

 }catch(Exception e){

  throw new RuntimeException(e);

}

    }

    //Autre code....

           

Dans la configuration xml du conteneur, configurer les paramètres d'injection

 

 

 

 

Injection de constructeur

L'injection basée sur un constructeur consiste à appeler un constructeur avec des paramètres lorsque le bean est instancié, le conteneur exécute le constructeur correspondant selon le type de paramètre

public class OracleUserDAO implémente UserDAO{

private JDBCDataSource dataSource

Public; OracleUserDAO(JDBCDataSource dataSource){

This.dataSource = dataSource;

}

//Autre code....

}

Spécifier l'injection par index des paramètres du constructeur

 

 

 

 

 < ;constructor-arg index = "0" ref = "dataSource"/>

Autowiring

Spring IOC Le conteneur peut automatiquement assembler (autowire) l'association entre les beans coopérants. Autowire peut être défini pour un seul bean. La commodité d'autowire est de réduire la configuration d'injection de XML

Dans le fichier de configuration XML, vous pouvez utiliser l'attribut autowire dans le fichier ;bean/> élément pour spécifier les règles d'assemblage automatique. Il existe cinq types de valeurs

La valeur de l'attribut est no : désactive l'assemblage automatique. 🎜>

La valeur de l'attribut est byName :Autowire basé sur le nom de la propriété Cette option vérifiera le conteneur et trouvera un bean qui est exactement le même que la propriété en fonction du nom, et câblera automatiquement. avec la propriété ;

La valeur de l'attribut est byType :S'il y a un bean du même type que l'attribut spécifié dans le conteneur, il sera automatiquement assemblé avec l'attribut

La valeur de l'attribut est constructeur :

est similaire à la méthode byType, sauf qu'elle est appliquée au paramètre constructeur

La valeur de l'attribut est autodetect :

Déterminez s'il faut utiliser la méthode constructeur ou byType pour la détection automatique via la classe bean Assembly, si un constructeur par défaut est trouvé, la méthode byType exemple de configuration sera utilisée :

< bean id = "userDAO" class = "org.dao.OracleUserDAO">

 

Dans la configuration ci-dessus, s'il y a une méthode Setter qui reçoit le type UserDao dans UserService, Spring peut y injecter automatiquement l'objet userDAO

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:
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