IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Annotations et héritage


Sujet :

Spring Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Points : 45
    Points
    45
    Par défaut Annotations et héritage
    Bonjour,

    J'ai plusieurs classes qui déclarent différentes variables précédées de l'annotation @Autowired. Ces variables font souvent références aux classes les plus utilisées.
    Prenons un exemple pour bien comprendre :
    j'ai au moins 10 classes qui déclarent la même variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Autowired
    private NodeService nodeService;
    (d'ailleurs je retrouve le même cas pour des références à un fichier de conf avec l'annotation @Value)

    Je pensais regrouper ces variables (@Autowired et @Value) dans une seule classe par exemple Service.java et faire hériter chaque classe de Service
    Le but étant de simplifier le code.

    Mais avant, j'aimerais être sûr de ne pas tout casser: l'application est utilisée au quotidien par des dizaines d'utilisateurs...

    J'avoue ne pas tout comprendre sur l'injection de dépendances et je ne sais pas si ce que je veux faire est sans danger (mais qu'est-ce qu'on y gagnerait en lisibilité !)

    Merci d'avance de vos explications

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Le but de l'héritage c'est la réutilisation, l'encapsulation et il faut garder en tête que ça doit aider la maintenance.

    Je ne vois pas ce que les Autowired dans la classe parent apporteraient en visibilité, au contraire. Au contraire, tu te retrouverais avec une classe parent qui ne définis que des champs, c'est pas top coté modèle objet. Coté maintenance, si une évolution future fait qu'un service a besoin de faire un @Autowired(name=....) sur une de ces dépendances, plutot que d'injecter le bean par défaut, tu sera obligé de déconstruire cet héritage. Et ça n'encapsule aucune logique.

    Pour ce qui est des @Value, je suppose qu'une EL est présente dedans pour préciser la valeur de config concernée. Là le risque, c'est vraiment de la duplication de logique dans tous les services qui injectent les même clés, les fautes de frappes, etc. J'opterais plutôt pour centraliser dans une ou plusieurs classe de Configuration qui regrouperais tout ces @Value récurrents et les exposerait sous forme de Getters. Ensuite, cette classe pourrait être injectée dans tous les service qui en ont besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Component
    public class Configuration {
      @Value("${monitoring.root:/var/local/monitoring}")
      private File rootMonitoringFolder;
      // .....
     
      public File getRootMonitoringFolder(){
         return rootMonitoringFolder;
      }
      //.....
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Service MonSuperService {
       @Autowired
       AutreService autreService;
     
       @Autowired
       Configuration configuration;
     
       public void doMonitor() {
       //...
        new File(configuration.getRootMonitoringFolder(),"superService.status");
       // ....
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 78
    Points : 45
    Points
    45
    Par défaut
    C'est clair, précis et détaillé ! Merci beaucoup pour tes explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. héritage dans les annotations
    Par tchize_ dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2010, 16h32
  2. mapping hibernate -> annotation, cas de l'héritage d'id
    Par tchize_ dans le forum Hibernate
    Réponses: 2
    Dernier message: 26/03/2009, 10h12
  3. annotation et héritage
    Par *alexandre* dans le forum Hibernate
    Réponses: 0
    Dernier message: 02/10/2008, 08h00
  4. APT Héritage annotation
    Par metalpetsFR dans le forum Langage
    Réponses: 1
    Dernier message: 28/08/2008, 11h53
  5. pb Mapping héritage hibernate annotations
    Par lilou13_13 dans le forum JPA
    Réponses: 1
    Dernier message: 08/07/2007, 22h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo