12
votes

Posilez le champ de fichier de Spring Soot via Annotation

est-il possible de faire quelque chose comme ceci: xxx

via des annotations sans créer une annotation personnalisée et peupler le champ par réflexion? Il ne peut pas être fait avec @Value, car il ne fonctionne qu'avec des chaînes ...

Sinon, quelle est la meilleure façon de traiter des annotations personnalisées de haricot de printemps et une init la bean en conséquence?


0 commentaires

3 Réponses :


0
votes

Si je comprends la question, vous essayez de définir la valeur d'un champ qui est de fichier de type? Pourriez-vous simplement injecter le nom du fichier avec le @Value, puis créer l'objet de fichier dans le code si nécessaire?


1 commentaires

Pas bon, le constructeur de fichiers s'attend à ce que l'exécution d'exécution absolue ou JVM, vous obtenez généralement des ressources de CLASSPATH ... je devrais aller comme "nouveau fichier (ce.class.getclassloader.getresource (" Fichier "). Touri ()) ; "... c'est juste une chose laide à faire ... Spring a un bon soutien comme CLASSPATHRESOURCE (String Path, Classloader Classloader) qui pourrait le gérer derrière la scène



27
votes

Utilisez une ressource comme champ.

@Value("file:/some/resource/path/myTemplate.txt")
Resource template;


7 commentaires

Cool, BTW, Savez-vous comment prolonger / utiliser AutoWaireNotationBeanPostProcessor pour injecter des champs / méthodes ou les traiter d'une manière ou d'une autre, avec des annotations personnalisées?


Pouvez-vous me donner un exemple de ce que vous voulez faire?


Vous pouvez peut-être utiliser Testng - laissez-vous dire que vous avez une méthode ABC (A, B, C) qui doit être appelée à certaines valeurs ... Je l'annote avec @DataProviked annotation et créez une méthode de DataProvider correspondante ... et je voudrais AUTOWIRELNOTATIONBeanPostProcessor pour saisir l'annotation, exécuter la méthode de DataProvider et initialiser que ABC (A, B, C); Méthode ... C'est un scénario non-sens, qui peut être fait à la source normalement ... Je ne peux penser à rien de vrai maintenant :-) Le point important est, obtenez l'annotation et faire quelque chose, tout ce que vous voulez ...


Consultez cette question: Stackoverflow.com/questions/5337128/...


Vous auriez besoin de créer votre propre beanpostProcessor et devez-le fonctionner comme l'autre * annotationbeanpostProcessor s.


Voir aussi cette Stackoverflow.com/Questtions/259140/... < / a>


Quel est le "templatepath"? BTW dans WebApp, si je vais comme ça @Value ("$ {classpath: web-inf / classes / exc-msg.properties}") Il ne recherche pas sur la classe de classe, mais à partir de la racine du contexte de l'application Web ... Vous savez comment travailler autour de cela?