Je ne sais pas si je comprends bien, mais de ce que je suis, est que je peux utiliser des @Value
annotations pour lire les valeurs de mon application.properties
.
Comme je l' ai pensé à cela ne fonctionne que pour Beans
.
Je définissais un haricot comme celui-ci
@Service
public class DBConfigBean {
@Value("${spring.datasource.username}")
private String userName;
@Bean
public String getName() {
return this.userName;
}
}
Lorsque l'application que je commence suis en mesure de récupérer le nom d'utilisateur, mais - comment puis-je accéder à cette valeur lors de l'exécution?
Chaque fois que je fais
DBConfigBean conf = new DBConfigBean() conf.getName();
* ÉDITER *
En raison des commentaires que je suis en mesure d'utiliser cette configuration DBConfigBean - mais mon problème initial reste encore, quand je veux l'utiliser dans une autre classe
@Configurable
public SomeOtherClass {
@Autowired
private DBConfigBean dbConfig; // IS NULL
public void DoStuff() {
// read the config value from dbConfig
}
}
Comment puis-je lire la DBConfig dans une certaine classe d'aide que je peux définir comme un haricot
Merci
Vous ne devriez pas instancier votre service avec le nouvel opérateur. Vous devez injecter, par exemple
@Autowired
private DBConfigBean dbConfig;
puis dbConfig.getName();
Aussi , vous n'avez pas besoin @Bean
décorateur dans votre getName()
méthode
Vous avez juste besoin de dire au printemps où chercher vos haricots annotés. Donc, dans votre configuration, vous pouvez ajouter ce qui suit:
@ComponentScan(basePackages = {"a.package.containing.the.service",
"another.package.containing.the.service"})
ÉDITER
Le @Value
, @Autowired
etc annotations ne peut fonctionner avec des haricots, que le printemps est au courant.
Déclarez votre SomeOtherClass
comme un haricot et ajoutez le package config dans votre classe @Configuration
@Bean
private SomeOtherClass someOtherClass;
puis
@Configuration
@ComponentScan(basePackages = {"a.package.containing.the.service"
"some.other.class.package"})
public class AppConfiguration {
//By the way you can also define beans like:
@Bean
public AwesomeService service() {
return new AwesomeService();
}
}