Nous avons résumé comment configurer l'injection de dépendances pour Spring Framework.
Par défaut, les packages de la même hiérarchie que les packages de la classe avec @ ComponentScan sont analysés. Si vous souhaitez analyser d'autres classes, spécifiez le nom du package dans scanBasePackage.
// @Il peut également être spécifié pour les annotations composées telles que SpringBootApplication.
@ComponentScan(scanBasePackages={"com.example"})
Définissez l'objet dépendant en tant que membre de private`` final, et définissez le constructeur qui reçoit l'objet dépendant comme argument dans le constructeur. Lors de l'utilisation de Lombok, cela peut être décrit comme suit.
@Component
class ComponentA { ...
@RequiredArgsConstructor
class ClassA {
// @Le câblage automatique peut être omis.
private final ComponentA componentA;
...
Auparavant, il était courant de spécifier «@ Autowired» pour les membres non «finaux» ou leurs Setters.
class ClassA {
@Autowired
private ComponentA componentA;
...
class ClassA {
private ComponentA componentA;
@Autowired
public void setComponentA(ComponentA componenA) {
...
Actuellement, cela est recommandé car l'utilisation du constructeur présente les avantages suivants.
final. (Normalement, la variable qui stocke l'objet DI n'est pas réécrite.)Puisqu'il s'agit d'un standard Java, il est facile de passer à un autre conteneur DI.
@Named //Ou@ManagedBean
class ComponentA { ... }
Spécifiez @ Inject dans le constructeur (ou Setter). (Le poseur est également acceptable.)
@RequiredArgsConstructor(onConstructor=@__(@Inject))
class ClassA {
private final ComponentA componentA;
...
Vous pouvez également spécifier «@ Inject» comme membre.
class ClassA {
@Inject
private ComponentA componentA;
...
Recommended Posts