Pourquoi ne pouvons-nous pas activer automatiquement la variable d'instance statique dans le bean Spring. Je sais qu'il existe un autre moyen d'y parvenir, mais je veux juste savoir pourquoi nous ne pouvons pas le faire de la manière ci-dessous.
par exemple
@Autowired
public static Test test;
Réponses:
Parce que l'utilisation de champs statiques encourage l'utilisation de méthodes statiques. Et les méthodes statiques sont mauvaises. L'objectif principal de l'injection de dépendances est de permettre au conteneur de créer des objets pour vous et de les câbler. Cela facilite également les tests.
Une fois que vous commencez à utiliser des méthodes statiques, vous n'avez plus besoin de créer une instance d'objet et les tests sont beaucoup plus difficiles. De plus, vous ne pouvez pas créer plusieurs instances d'une classe donnée, chacune avec une dépendance différente en cours d'injection (car le champ est implicitement partagé et crée un état global - également mauvais).
la source
@BeforeClass
dans un SpringJUnit4ClassRunner, et que cette méthode accède aux beans@Autowired
dans le test ... vous ne pouvez pas fondamentalement. Ce qui est ennuyeux.Parce que lorsque le chargeur de classe charge les valeurs statiques, le contexte Spring n'est pas encore nécessairement chargé. Ainsi, le chargeur de classe n'injectera pas correctement les champs statiques dans le bean et échouera.
la source
Selon le concept de la POO, ce sera une mauvaise conception si les variables statiques sont câblées automatiquement.
La variable statique n'est pas une propriété d'Object, mais c'est une propriété d'une classe. Le câblage automatique à ressort est effectué sur des objets, ce qui rend la conception propre à mon avis. Vous pouvez déployer l'objet bean câblé automatique en tant que singleton et obtenir le même résultat que le définir statique.
la source
Grâce à cette solution, vous pouvez câbler automatiquement des champs statiques au printemps.
la source