Maison Java javaDidacticiel Introduction aux méthodes de la base de données JDBC au Spring

Introduction aux méthodes de la base de données JDBC au Spring

May 11, 2017 am 10:08 AM
java jdbc spring 连接池

Cet article présente principalement la construction du framework JDBC de base basé sur Spring ; l'ajout, la suppression, la modification et l'interrogation de JDBC basé sur Spring, etc., qui a une très bonne valeur de référence ; . Voyons cela avec l'éditeur ci-dessous

Pool de connexions à la base de données

Pour une application de base de données simple, l'accès à la base de données n'étant pas très fréquent, vous pouvez simplement lorsque vous avez besoin d'accéder à la base de données, vous créez une nouvelle connexion et la fermez lorsque vous avez terminé. Cela n'entraînera aucune surcharge de performances. Mais pour une application de base de données complexe, la situation est complètement différente. L'établissement et la fermeture fréquents de connexions réduiront considérablement les performances du système, car l'utilisation des connexions est devenue un goulot d'étranglement des performances du système.

En établissant un pool de connexions à la base de données et un ensemble de politiques de gestion de l'utilisation des connexions, l'effet de réutilisation des connexions peut être obtenu, de sorte qu'une connexion à la base de données puisse être en toute sécurité et réutilisée efficacement, évitant ainsi besoin d'une base de données La surcharge liée à l'établissement et à la fermeture fréquents de connexions. Le principe de base du

pool de connexions à la base de données est de maintenir un certain nombre de connexions à la base de données dans le pool d'objets internes et d'exposer les méthodes d'acquisition et de retour des connexions à la base de données à l'extérieur. Par exemple : les utilisateurs externes peuvent obtenir la connexion via la méthode getConnection, puis renvoyer la connexion via la méthode releaseConnection après utilisation. Notez que la connexion n'est pas fermée pour le moment, mais est recyclée par le gestionnaire de pool de connexions et préparée pour la suivante. utiliser.

Avantages apportés par la technologie du pool de connexions aux bases de données :

1. Réutilisation des ressources

En raison de Les connexions à la base de données sont réutilisées, évitant ainsi une surcharge de performances causée par la création et la libération fréquentes de liens. D'autre part, sur la base de la réduction de la consommation du système, cela améliore également la stabilité de l'environnement d'exploitation du système (réduit la fragmentation de la mémoire et le traitement temporaire de la base de données/le nombre de threads)

2. Vitesse de réponse du système plus rapide

Pendant le processus d'initialisation du pool de connexions à la base de données, plusieurs pools de connexions à la base de données sont souvent créés et placés dans le pool pour la sauvegarde. À ce stade, l'initialisation de la connexion est terminée. Pour le traitement des demandes métier, les connexions disponibles existantes sont directement utilisées pour éviter la surcharge de temps liée au processus d'initialisation et de libération de la connexion à la base de données, réduisant ainsi le temps de réponse global du système

3. Gestion unifiée des connexions pour éviter les fuites de connexion à la base de données

Dans une implémentation de pool de connexions à la base de données relativement complète, la récupération forcée peut être basée sur le paramètre de délai d'expiration d'occupation de connexion prédéfini. La connexion occupée évite ainsi les fuites de ressources qui peuvent survenir lors des opérations régulières de connexion à la base de données.

Il existe actuellement de nombreux produits de pool de connexions à des bases de données, notamment :

1, dbcp

dbcp, le pool de connexions à la base de données produit par Apache, est recommandé par l'équipe de développement Spring. Il est activement développé et est un produit de pool de connexions à la base de données extrêmement largement utilisé. Cependant, depuis Internet

2, c3p0

le pool de connexions à la base de données recommandé par l'équipe de développement Hibernate, qui implémente la liaison des sources de données et JNDI

3. Proxool

Proxool a une bonne réputation et il n'y a pas de commentaires négatifs (par exemple, dbcp n'est pas utilisé par Hibernate). car Hibernate pense qu'il y a trop de bugs. Recommandé) est également le pool de connexions à la base de données recommandé par l'équipe de développement d'Hibernate, mais il n'y a pas beaucoup d'utilisateurs et le développement n'est pas assez actif. Ce pool de connexions fournit la fonction de surveillance du pool de connexions, qui est pratique et facile à utiliser, ce qui facilite la détection des fuites du pool de connexions

Création du framework de base JDBC basé sur Spring

Parlons-en d'abord. Utilisez Spring pour implémenter JDBC. Le pool de connexions à la base de données utilise DBCP recommandé par l'équipe de développement de Spring et nécessite trois packages jar :

1. jar. Il est disponible sur le site officiel. Cliquez sur J'ai téléchargé

2.commons.pool-1.6.jar, qui est disponible sur le site officiel. Cliquez ici pour télécharger

3. .collections4-4.0.jar, disponible sur le site officiel

Après avoir téléchargé ces trois packages jar, veuillez les importer dans votre propre projet (remarque : n'oubliez pas d'importer le MySql package). Bien que dbcp et pool aient des versions dbcp2 et pool2, elles sont disponibles sur le site officiel d'Apache. Elles peuvent être téléchargées, mais l'adresse de téléchargement de la version de dbcp1 et pool1 est fournie ici. L'une des raisons est que dbcp2 et pool2. ne peut s'exécuter que dans JDK 1.7 et supérieur, tandis que dbcp1 et pool1 peuvent s'exécuter dans JDK 1.6 Run, étant donné que le JRE par défaut fourni avec MyEclipse10 est la version 1.6, alors téléchargez et utilisez dbcp1 et pool1 ici. Si vous voulez dbcp2 et pool2, vous pouvez les télécharger depuis le site officiel d'Apache. Cependant, veuillez noter que dbcp2 doit être associé à pool2 et que dbcp1 doit être associé à pool1. Ils ne peuvent pas être utilisés de manière interchangeable.

JDBC, j'ai déjà écrit un article. La création de base de données et les classes d'entités sont toutes utilisées dans l'article original. Ici, je viens de déplacer le JDBC natif vers Spring JDBC. . Ajoutez plus de fonctions, la catégorie de gestion des étudiants est :

public class StudentManager
{
 private JdbcTemplate jdbcTemplate;

 private static StudentManager instance = new StudentManager();

 public static StudentManager getInstance()
 {
 return instance;
 }

 public JdbcTemplate getJdbcTemplate()
 {
 return jdbcTemplate;
 }
 public void setJdbcTemplate(JdbcTemplate jdbcTemplate)
 {
 this.jdbcTemplate = jdbcTemplate;
 }
}
Copier après la connexion

Le fichier de configuration XML de Spring s'appelle jdbc.xml, et jdbc.xml s'écrit comme :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-4.2.xsd">

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
 <!-- 驱动包名 -->
 <property name="driverClassName" value="com.mysql.jdbc.Driver" />
 <!-- 数据库地址 -->
 <property name="url" value="jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8;" />
 <!-- 用户名 -->
 <property name="username" value="root" />
 <!-- 密码 -->
 <property name="password" value="root" />
 <!-- 最大连接数量 -->
 <property name="maxActive" value="150" />
 <!-- 最小空闲连接 -->
 <property name="minIdle" value="5" />
 <!-- 最大空闲连接 -->
 <property name="maxIdle" value="20" />
 <!-- 初始化连接数量 -->
 <property name="initialSize" value="30" />
 <!-- 连接被泄露时是否打印 -->
 <property name="logAbandoned" value="true" />
 <!-- 是否自动回收超时连接 -->
 <property name="removeAbandoned" value="true" />
 <!-- 超时等待时间(以秒为单位) -->
 <property name="removeAbandonedTimeout" value="10" />
 </bean>

 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
 <property name="dataSource" ref="dataSource" />
 </bean>
 <bean id="studentManager" class="com.xrq.jdbc.StudentManager" factory-method="getInstance"> 
 <property name="jdbcTemplate" ref="jdbcTemplate" />
 </bean>
</beans>
Copier après la connexion

fonction principale est :

public static void main(String[] args)
{ 
 ApplicationContext ac = 
  new ClassPathXmlApplicationContext("jdbc.xml");
 System.out.println(StudentManager.getInstance());
 System.out.println(StudentManager.getInstance().getJdbcTemplate());
}
Copier après la connexion

fonctionne sans aucun problème. J'obtiens l'adresse de référence de StudentManager et l'adresse de référence de l'attribut jdbcTemplate dans StudentManager, indiquant que toute la connexion et l'injection ne posent aucun problème.

JDBCTemple est le modèle JDBC le plus basique de Spring, utilisant JDBC et de simples indexparamètresrequête pour fournir un accès simple à la base de données. En plus de JDBCTemplate, Spring propose également deux classes : NamedParameterJdbcTemplate et SimpleJdbcTemplate. La première peut lier des valeurs aux paramètres nommés dans SQL lors de l'exécution de requêtes au lieu d'utiliser des index. La seconde profite des fonctionnalités de Java 5 telles que l'autoboxing, les génériques et <. 🎜>Paramètre variable liste pour simplifier l'utilisation des modèles JDBC. Lequel utiliser dépend des préférences personnelles. JdbcTemplate est utilisé ici, donc JdbcTemplate est ajouté à la classe de gestion des étudiants.

De plus :

1. dbcp fournit de nombreux paramètres pour la configuration utilisateur. La signification de chaque paramètre est écrite dans le . Pour connaître la signification de chaque paramètre, vous pouvez la vérifier en ligne <🎜. >

2. Faites attention à l'attribut url de dbcp. L'url fait référence à l'adresse de connexion à la base de données doit être convertie lorsque vous rencontrez des

caractères spéciaux

Signification <🎜. >, donc le "&" devient ici "&", sinon une erreur sera signalée Ajouter, supprimer, modifier et vérifier JDBC en fonction de Spring

Partie ci-dessus du framework de base de Spring JDBC est construit. Voyons comment le code Java implémente CRUD Dans ce processus, jdbc.xml n'a pas besoin d'être modifié.

1. Ajoutez des informations sur l'étudiant, le code est :

2. Supprimez les

informations sur l'étudiant spécifiées en fonction de l'identifiant

, le code est :

.
// 添加学生信息
public boolean addStudent(Student student)
{
 try
 {
 jdbcTemplate.update("insert into student values(null,?,?,?)", 
  new Object[]{student.getStudentName(), student.getStudentAge(), student.getStudentPhone()},
  new int[]{Types.VARCHAR, Types.INTEGER, Types.VARCHAR});
 return true;
 }
 catch (Exception e)
 {
 return false;
 }
}
Copier après la connexion

3. Mettre à jour les informations sur l'étudiant en fonction de l'identifiant , le code est :

// 根据Id删除单个学生信息
public boolean deleteStudent(int id)
{
 try
 {
 jdbcTemplate.update("delete from student where studentId = ?", new Object[]{id}, new int[]{Types.INTEGER});
 return true;
 }
 catch (Exception e)
 {
 return false;
 }
}
Copier après la connexion

4. Interroger les informations sur l'étudiant en fonction de l'identifiant, le code est : .

5. Pour interroger toutes les informations sur les étudiants, le code est :
// 根据Id更新指定学生信息
public boolean updateStudent(int Id, Student student)
{
 try
 {
 jdbcTemplate.update("update student set studentName = ?, studentAge = ?, studentPhone = ? where studentId = ?", 
  new Object[]{student.getStudentName(), student.getStudentAge(), student.getStudentPhone(), Id},
  new int[]{Types.VARCHAR, Types.INTEGER, Types.VARCHAR, Types.INTEGER});
 return true;
 }
 catch (Exception e)
 {
 return false;
 }
}
Copier après la connexion

Il s'agit d'une simple opération CRUD Avec ces 5 comme base, le reste peut être étendu sur la base de. ces 5, je ne continuerai donc pas à écrire en détail. Poursuivant, permettez-moi de parler de quelques points à noter :
// 根据学生Id查询单个学生信息
public Student getStudent(int id)
{
 try
 {
 return (Student)jdbcTemplate.queryForObject("select * from student where studentId = ?", 
  new Object[]{id}, new int[]{Types.INTEGER}, new RowMapper<Student>(){
  public Student mapRow(ResultSet rs, int arg1) throws SQLException
  {
  Student student = new Student(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4));
  return student;
  }
 });
 }
 // 根据Id查询学生信息抛异常, 不管什么原因, 认为查询不到该学生信息, 返回null
 catch (DataAccessException e)
 {
 return null;
 }
}
Copier après la connexion

1 Par expérience personnelle, à l'exception de la dernière requête, il est recommandé d'ajouter try. ..catch... bloque les autres, car dans Lorsque l'opération échoue, une exception

sera levée
// 查询所有学生信息
public List<Student> getStudents()
{
 List<Map<String, Object>> resultList = jdbcTemplate.queryForList("select * from student");
 List<Student> studentList = null;
 if (resultList != null && !resultList.isEmpty())
 {
 studentList = new ArrayList<Student>();
 Map<String, Object> map = null;
 for (int i = 0; i < resultList.size(); i++)
 {
  map = resultList.get(i);
  Student student = new Student(
  (Integer)map.get("studentId"), (String)map.get("studentName"),
  (Integer)map.get("studentAge"), (String)map.get("studentPhone")
  );
  studentList.add(student);
  }
 }
 return studentList;
}
Copier après la connexion
Si vous l'attrapez, vous saurez que l'opération a échoué. Sinon, le programme sera terminé. , et vous ne saurez pas si l'opération a réussi ou échoué

2. Lors de l'ajout ou de la mise à jour d'informations, il n'est pas recommandé d'utiliser chaque champ à opérer comme paramètre formel. être une classe d'entité Student. Ceci est plus conforme aux

orientés objetprincipes de conception

, deuxièmement, il existe de nombreux champs dans la liste des paramètres formels, ce qui peut facilement conduire à des erreurs

3. Pour les méthodes de mise à jour et de requête, s'il y a des espaces réservés ?, il est recommandé de choisir surcharge avec les types de paramètres Méthode, précisez le type de champ de chaque espace réservé, tout comme ce que j'ai écrit dans le code ci-dessus

Enfin, voici les

utilisations de base de jdbcTemplate, il existe de nombreuses méthodes dans jdbcTemplate , je n'entrerai pas dans les détails une par une. Vous pouvez l'essayer vous-même, ou. vous pouvez consulter la documentation Spring API

.

Lire les données dans le fichier de configuration

Avant, nous avons configuré certaines propriétés de la connexion à la base de données dans db.properties, ce qui facilite la modification, mais ici est-il codé en dur dans jdbc.xml, nous devons donc réfléchir à un moyen de lire la configuration à partir de db.properties. Le contexte aide les développeurs à y parvenir. Jetez un œil à la façon dont jdbc.xml est écrit :

<🎜. > 【Recommandations associées】

1

Tutoriel vidéo gratuit Java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-4.2.xsd">

 <context:property-placeholder location="classpath:db.properties"/>

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
 <!-- 驱动包名 -->
 <property name="driverClassName" value="${mysqlpackage}" />
 <!-- 数据库地址 -->
 <property name="url" value="${mysqlurl}" />
 <!-- 用户名 -->
 <property name="username" value="${mysqlname}" />
 <!-- 密码 -->
 <property name="password" value="${mysqlpassword}" />
 <!-- 最大连接数量 -->
 <property name="maxActive" value="150" />
 <!-- 最小空闲连接 -->
 <property name="minIdle" value="5" />
 <!-- 最大空闲连接 -->
 <property name="maxIdle" value="20" />
 <!-- 初始化连接数量 -->
 <property name="initialSize" value="30" />
 <!-- 连接被泄露时是否打印 -->
 <property name="logAbandoned" value="true" />
 <!-- 是否自动回收超时连接 -->
 <property name="removeAbandoned" value="true" />
 <!-- 超时等待时间(以秒为单位) -->
 <property name="removeAbandonedTimeout" value="10" />
 </bean>

 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
 <property name="dataSource" ref="dataSource" />
 </bean>
 <bean id="studentManager" class="com.xrq.jdbc.StudentManager" factory-method="getInstance"> 
 <property name="jdbcTemplate" ref="jdbcTemplate" />
 </bean>
</beans>
Copier après la connexion

2

Manuel du didacticiel JAVA

3. .

Analyse complète des annotations 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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

<🎜>: Grow A Garden - Guide de mutation complet
4 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1677
14
Tutoriel PHP
1280
29
Tutoriel C#
1257
24
Compositeur: aider le développement de PHP à travers l'IA Compositeur: aider le développement de PHP à travers l'IA Apr 29, 2025 am 12:27 AM

L'IA peut aider à optimiser l'utilisation du compositeur. Les méthodes spécifiques incluent: 1. Optimisation de la gestion des dépendances: AI analyse les dépendances, recommande la meilleure combinaison de versions et réduit les conflits. 2. Génération de code automatisée: AI génère des fichiers composer.json conformes aux meilleures pratiques. 3. Améliorer la qualité du code: l'IA détecte des problèmes potentiels, fournit des suggestions d'optimisation et améliore la qualité du code. Ces méthodes sont implémentées par l'apprentissage automatique et les technologies de traitement du langage naturel pour aider les développeurs à améliorer l'efficacité et la qualité du code.

Comment utiliser les fonctions MySQL pour le traitement et le calcul des données Comment utiliser les fonctions MySQL pour le traitement et le calcul des données Apr 29, 2025 pm 04:21 PM

Les fonctions MySQL peuvent être utilisées pour le traitement et le calcul des données. 1. L'utilisation de base comprend le traitement des chaînes, le calcul de la date et les opérations mathématiques. 2. L'utilisation avancée consiste à combiner plusieurs fonctions pour implémenter des opérations complexes. 3. L'optimisation des performances nécessite d'éviter l'utilisation de fonctions dans la clause où et d'utiliser des tables groupby et temporaires.

H5: Améliorations clés de HTML5 H5: Améliorations clés de HTML5 Apr 28, 2025 am 12:26 AM

HTML5 apporte cinq améliorations clés: 1. Les balises sémantiques améliorent la clarté du code et les effets SEO; 2. Prise en charge multimédia simplifie la vidéo et la formation audio; 3. L'amélioration du formulaire simplifie la vérification; 4. Le stockage hors ligne et local améliore l'expérience utilisateur; 5. Canvas et fonctions graphiques améliorent la visualisation des pages Web.

Discuter des situations où l'écriture de code spécifique à la plate-forme en Java pourrait être nécessaire. Discuter des situations où l'écriture de code spécifique à la plate-forme en Java pourrait être nécessaire. Apr 25, 2025 am 12:22 AM

Les raisons de l'écriture du code spécifique à la plate-forme en Java incluent l'accès à des fonctionnalités spécifiques du système d'exploitation, l'interaction avec le matériel spécifique et l'optimisation des performances. 1) Utilisez JNA ou JNI pour accéder au registre Windows; 2) interagir avec les pilotes matériels spécifiques à Linux via JNI; 3) Utilisez du métal pour optimiser les performances de jeu sur macOS via JNI. Néanmoins, la rédaction du code spécifique à la plate-forme peut affecter la portabilité du code, augmenter la complexité et potentiellement poser des risques de performances et de sécurité.

Comment utiliser les traits de type en C? Comment utiliser les traits de type en C? Apr 28, 2025 pm 08:18 PM

Les typétraires sont utilisés en C pour la vérification et le fonctionnement des types de temps de compilation, l'amélioration de la flexibilité du code et la sécurité des types. 1) Le jugement de type est effectué via STD :: is_integral et std :: is_floating_point pour obtenir une vérification et une sortie de type efficaces. 2) Utilisez STD :: is_trivially_copyable pour optimiser la copie vectorielle et sélectionner différentes stratégies de copie en fonction du type. 3) Faites attention à la prise de décision en temps de compilation, à la sécurité des types, à l'optimisation des performances et à la complexité du code. L'utilisation raisonnable des typétraires peut considérablement améliorer la qualité du code.

Comment configurer le jeu de caractères et les règles de collation de MySQL Comment configurer le jeu de caractères et les règles de collation de MySQL Apr 29, 2025 pm 04:06 PM

Les méthodes de configuration des ensembles de caractères et des collations dans MySQL incluent: 1. Définition des jeux de caractères et des collations au niveau du serveur: setNames'utf8 '; SetCharAttersetUtf8; SetCollation_Connection = 'utf8_general_ci'; 2. Créez une base de données qui utilise des jeux de caractères et des collations spécifiques: CreatedAtAbasEExample_DBCharacteSetUtf8CollateUtf8_General_ci; 3. Spécifiez les ensembles de caractères et les collations lors de la création d'une table: CreateTableExample_Table (IDInt

Comment renommer une base de données dans MySQL Comment renommer une base de données dans MySQL Apr 29, 2025 pm 04:00 PM

Le renommer une base de données dans MySQL nécessite des méthodes indirectes. Les étapes sont les suivantes: 1. Créez une nouvelle base de données; 2. Utilisez MySQLDump pour exporter l'ancienne base de données; 3. Importez les données dans la nouvelle base de données; 4. Supprimer l'ancienne base de données.

Comment implémenter le modèle Singleton en C? Comment implémenter le modèle Singleton en C? Apr 28, 2025 pm 10:03 PM

La mise en œuvre du modèle Singleton en C peut garantir qu'il n'y a qu'une seule instance de la classe via des variables de membres statiques et des fonctions de membres statiques. Les étapes spécifiques incluent: 1. Utilisez un constructeur privé et supprimez le constructeur de copie et l'opérateur d'affectation pour éviter une instanciation directe externe. 2. Fournissez un point d'accès global via la méthode statique GetInstance pour vous assurer qu'une seule instance est créée. 3. Pour la sécurité des filetages, le mode de verrouillage à double vérification peut être utilisé. 4. Utilisez des pointeurs intelligents tels que STD :: Shared_PTR pour éviter les fuites de mémoire. 5. Pour les exigences de haute performance, des variables locales statiques peuvent être implémentées. Il convient de noter que le modèle Singleton peut conduire à l'abus de l'État mondial, et il est recommandé de l'utiliser avec prudence et de considérer des alternatives.

See all articles