L'enregistrement d'une instance comme "singleton' haricot au démarrage de l'application
Je joue avec Spring Boot, et je suis en train de construire une instance de ServiceImpl
être résolue quand un Service
est nécessaire. Actuellement, je suis en annotant la mise en œuvre @Component
mais cela ne me donne pas la possibilité de construire une instance comme je veux.
La ServiceImpl
devrait être construit avec une Chaîne de caractères contenant le chemin vers un fichier sur le disque. Je voudrais le faire dans la méthode main de la @SpringBootApplication
de classe de l'application.
Peut-être que c'est juste moi, venant d'une longue .NET fond où nous avons l'habitude de configurer le conteneur IoC comme:
Service service = new Service("C:\\data.bin");
container.RegisterSingleton<IService>(service); //now whoever asks for a IService will receive this precise instance
Ne ce sens au Printemps monde?
LE: je suis bien conscient de la GoF singleton définition (c'est à dire d'empêcher tous les autres de la création d'instances de la classe) - je ne suis pas le ciblage de cette.
Je ne pense pas que de le ranger dans les propriétés, c'est une bonne suggestion! En fait, vous pourriez promouvoir cette réponse 🙂
OriginalL'auteur Andrei Rînea | 2016-11-29
Vous devez vous connecter pour publier un commentaire.
Comme décrit dans le commentaire, ce qui peut être fait en stockant les détails de votre emplacement sur un fichier de configuration puis de les injecter sur le Printemps de Haricots initialisation.
En supposant que votre
application.properties
ressemble à ceci:Ci-dessous, je suis démo-ing 4 façons de le faire parvenir:
1.Par l'injection de votre propriété directement sur le Haricot méthode de création:
2.Par l'injection de la propriété sur une Config à l'échelle de la variable et de l'utiliser dans votre méthode d'Haricot création:
3.Par l'injection de la totalité de l'environnement dans la Config et ensuite choisir la propriété nécessaire:
4.C'est un Printemps de Démarrage de manière exclusive. Vous pouvez utiliser Type-safe Propriétés de Configuration en annotant avec
@ConfigurationProperties
directement votre bean définir un préfixe d'espace de noms et de tous les paramètres à partir de ce point sera automatiquement mappées sur les propriétés définies dans l'haricot!Ci-dessous l'ensemble d'un fichier de code dans une seule pièce:
Merci - j'ai ajouté un lien vers la documentation où vous trouverez tous les détails à ce sujet.
OriginalL'auteur dimitrisli
Dans le même fichier que vous avez
@SpringBootApplication
faire:Printemps devrait autowire tout en place pour vous. Il devrait être un singleton par défaut (http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes).
Edit 1: Vous devez également annoter votre Service mise en œuvre par @Service au lieu de @Composant (voir: Quelle est la différence entre @Composant, @Référentiel & @Service annotations au Printemps?).
Edit 2: Vous n'avez pas nécessairement besoin de mettre les
@Bean
méthode dans la classe qui a@SpringBootApplication
. Vous pouvez le mettre dans n'importe quelle classe qui a le@Configuration
annotation.OriginalL'auteur Jonathan Sterling