Dans ma classe, je @Configuration
dépendances fonctionnelles comme les suivantes:printemps: injection @Resource a cessé de travailler sous JDK9
@Configuration
public class MyConfig {
@Resource(name = "firstDataSource")
private DataSource firstDataSource;
// more code
}
L'injection de dépendance a travaillé dans le JDK Oracle 8: champ firstDataSource
a été injecté avec succès avec une valeur non nulle .
Maintenant j'ai essayé de lancer l'application (sans modification) à 9. Le résultat JDK est que @Resource
ne déclenche pas plus l'injection de dépendance: tout annotée avec cette annotation reste null
.
Quelle pourrait être la raison pour que @Resource
cesse de fonctionner?
Le ressort 4.0.9 est utilisé dans le projet.
Voici un projet de test démontrant le problème: https://github.com/rpuch/test-spring-injection-jdk9
Il contient un seul test: MainTest
que je dirige de mon IDE. Lorsque j'utilise 8 JDK, il émet
сен 29, 2017 10:45:13 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
INFO: Refreshing org.spring[email protected]5f8ed237: startup date [Fri Sep 29 22:45:13 SAMT 2017]; root of context hierarchy
OK
Mais sous 9 JDK, il lance une exception lors du démarrage qui est causée par ce qui suit:
Caused by: java.lang.IllegalStateException: bean1 is not injected
at Bean2.<init>(Bean2.java:7)
at Config2.bean2(Config2.java:16)
qui se produit lorsque la dépendance n'est pas injecté.
À quel paquet appartient '@ Resource'? Est-ce que [votre code a été compilé avec succès] (https://stackoverflow.com/questions/46352120/incompatible-types-equality-constraints-and-method-not-found-during-java-9-migr)? Existe-t-il une instance reproductible pour tester cela? – nullpointer
C'est 'javax.annotation.Resource'. Oui, tout compile correctement. Je vais essayer de créer un projet de test pour reproduire cela. –
Et comment importez-vous/ajoutez-vous ce paquet dans votre module de projet? – nullpointer