Maison > Java > javaDidacticiel > Comment SpringBoot appelle la couche de service dans une classe personnalisée

Comment SpringBoot appelle la couche de service dans une classe personnalisée

WBOY
Libérer: 2023-05-11 23:01:20
avant
1331 Les gens l'ont consulté

Contexte :

Création d'un serveur TCP pour se connecter aux appareils intelligents, puis besoin de stocker des informations clés telles que le positionnement envoyé par l'appareil en temps réel dans la base de données.

Afin d'envisager la possibilité de fournir une interface de repos avec le monde extérieur à l'avenir, le serveur TCP est intégré au framework SpringBoot, bien sûr, il s'agit également d'utiliser le framework mybatis pour accéder aux données le plus rapidement possible, puis résolvez divers problèmes tels que comment démarrer et comment se déconnecter, puis dans Lors du traitement des messages du serveur TCP, vous devez écrire dans la base de données, appeler directement la couche DAO, compiler et signaler les erreurs.

Appelez plutôt la couche Service, compilez normalement, exécutez jusqu'au lieu appelant, signalez une exception de pointeur nul, suivez l'emplacement de l'exception et constatez que le service est vide, c'est-à-dire la couche de service injectée via @Autowired par le contrôleur précédent la couche échoue.

Solution :

1. Téléchargez le code

@Component
public class ServerHandler extends IoHandlerAdapter {
    @Autowired
    protected HealthDataService healthDataService;
    private static ServerHandler  serverHandler ;
    @PostConstruct //通过@PostConstruct实现初始化bean之前进行的操作
    public void init() {  
        serverHandler = this;  
        serverHandler.healthDataService = this.healthDataService;        
        // 初使化时将已静态化的testService实例化
    }  
    //测试调用
    public void test(){
        serverHandler .healthDataService.<你的service层方法>;
    }
Copier après la connexion

2. Instructions :

Chargez la classe qui doit appeler la couche Service de Spring via l'annotation @Component pour le composant

obtenez également l'objet Bean de la couche Service ; via @Autowired ;

Déclarez une variable statique pour la classe afin de faciliter le stockage de l'objet bean à l'étape suivante ;

Point clé : via l'annotation @PostConstruct, initialisez l'objet statique et sa variable membre statique healthDataService lors de l'initialisation. Le principe est d'obtenir l'objet bean de la couche service, de le stocker de manière statique pour éviter qu'il ne soit libéré.

Ces pièges :

Quand j'ai commencé à appeler, j'ai toujours pensé que c'était très simple. Dans le passé, j'écrivais une configuration pour springmvc, marquais l'objet comme un bean, puis je pouvais appeler les beans du. Conteneur Spring IOC à volonté. Mais c'est SpringBoot, je suppose qu'il y a encore une différence. J'ai essayé les trois premières pages d'aide de Baidu, mais cela a échoué. Y compris :

1) Déclarez la classe d'outils en tant que composant Spring, tel que @controller @compent, etc., et ajoutez le package où se trouve la classe d'outils dans le paramètre du package d'analyse automatique Spring invalide

2) créez un fichier ; nouveau service ; invalide ;

Traitement des transactions de plusieurs services s'appelant dans Springboot

Je souhaite appeler la méthode B d'un autre service dans la méthode A d'un service. Une annotation est également ajoutée, mais lorsqu'une exception est levée dans la méthode B, l'instruction d'insertion dans A peut toujours être exécutée avec succès.

La configuration de l'annotation est la suivante :

@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED)
Copier après la connexion

Je suis perplexe Après avoir recherché des informations pertinentes, le problème réside toujours dans la configuration de l'annotation @Transaction, et la restauration des exceptions doit être configurée.

@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = Exception.class)
Copier après la connexion

De cette façon, lorsqu'une exception est levée dans la méthode B, l'opération dans A sera également annulée et la transaction jouera un rôle de contrôle.

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