web-dev-qa-db-fra.com

Type d'annotation de Spring Obsolescence requise

Spring's Annotation Type Required est marqué comme obsolète

Déconseillé. à partir de 5.1, en faveur de l'utilisation de l'injection de constructeur pour les paramètres requis (ou une implémentation InitializingBean personnalisée)

Idem pour --- RequiredAnnotationBeanPostProcessor

Mais ce n'est pas clair quel est le remplacement, il semble qu'il ne devrait pas être disponible.

Cette modification nous empêche-t-elle de marquer la méthode comme requise, sauf si elle fait partie de la méthode constructeur? empêcher des exceptions inattendues sur la création de classe?

6
user7294900

Il existe trois façons d'injecter un bean via une annotation:

Injection sur le terrain

@Autowired
private FooService fooService;

Setter injection

private FooService fooService;

@Autowired
public void setFooService(FooService fooService) {
    this.fooService = fooService
}

Injection constructeur (c'est le remplacement mentionné)

private final FooService fooService;

@Autowired
public MyComponent(FooService fooService) {
    this.fooService = fooService;
}

Comme vous pouvez le voir, la seule façon de déclarer votre service final est d'utiliser l'injection du constructeur, qui remplace le @Required annotation car elle oblige l'utilisateur de votre classe à l'instancier avec les services requis. L'utilisateur ne doit pas nécessairement être Spring, il peut également s'agir d'un simple test unitaire.

Vous devez utiliser l'injection de constructeur pour les dépendances obligatoires et les injections de setter pour les dépendances facultatives au lieu de l'injection de champ. Quelques raisons pour lesquelles:

  • Il indique clairement à tous les dépendances requises
  • Cela facilite les tests
  • Vous pouvez rendre vos objets immuables

Lectures complémentaires:

11
qutax