Explication détaillée de la différence entre @Autowired et @Resource

1. Configuration @Autowired
Présente d'abord la configuration de l'annotation @Autowired, à travers laquelle la dépendance du Bean autowired peut être réalisée. Par exemple, la classe OrderService suivante instancie et injecte son objet OrderRepository dépendant via l'annotation @Autowired :
@Service
public class OrderService {     @Autowired     private OrderRepository orderRepository;     // ... } Il convient de noter que par défaut, @ Autowired effectuera injection de dépendance par type. S'il y a plusieurs beans du même type dans le conteneur, une exception sera levée. À ce stade, si vous devez spécifier un bean spécifique, vous pouvez utiliser l'annotation @Qualifier pour y parvenir.
    


    



@Service
public class OrderService {     @Autowired     @Qualifier("orderRepositoryImpl")     private OrderRepository orderRepository;     // ... } En outre, vous pouvez également utiliser l'annotation @Autowired sur les constructeurs, les méthodes Setter et d'autres méthodes personnalisées pour l'injection de dépendances. @Service public class OrderService {     private OrderRepository orderRepository;     @Autowired     public OrderService(OrderRepository orderRepository) {         this.orderRepository = orderRepository;     }     /**      * Injection Setter.      */     @Autowired     public void setOrderRepository(OrderRepository orderRepository ) {
    



    





    

    




    





        this.orderRepository = orderRepository;
    }
    
    /**
     * Injection de méthode personnalisée.
     */
    @Autowired
    public void injectOrderRepository(OrderRepository orderRepository) {         this.orderRepository = orderRepository;     }     // ... } 2. Configuration de @Resource Ensuite, introduisez @Resource La configuration des annotations permet également de réaliser la dépendance de l'assemblage automatique des beans. Comparé à @Autowired, il utilise des noms pour l'injection de dépendances.


    



Par exemple, la classe OrderService suivante instancie et injecte son objet OrderRepository dépendant via l'annotation @Resource :


@Service
public class OrderService {     @Resource(name = "orderRepositoryImpl")     private OrderRepository orderRepository;     // ... } Il convient de noter que par défaut, le nom du bean sera mis en correspondance en fonction du nom de la propriété. Si vous devez spécifier un nom, vous pouvez utiliser l'attribut name pour le définir.
    


    


Dans le même temps, @Resource prend également en charge l'attribut type, qui peut effectuer une injection de dépendance en fonction du type. Par exemple le code suivant :


@Service
public class OrderService {     @Resource(type = OrderRepository.class)     private OrderRepository orderRepository;     // ... } 3. Comparaison des différences En résumé, la différence entre les deux réside principalement dans l'injection de dépendances.
    


    



Pour @Autowired, il effectue l'injection de dépendances en fonction du type. S'il existe plusieurs beans du même type, vous devez utiliser @Qualifier pour les distinguer. Et @Resource effectue l'injection de dépendance en fonction du nom ou du type, et le configure via l'attribut name ou type.

En cours d'utilisation, les deux peuvent réaliser la dépendance des beans à câblage automatique, mais les scénarios d'utilisation sont légèrement différents. En général, si nous n'avons besoin d'injecter que par type, alors @Autowired est préféré. Si vous devez injecter par nom ou par type, @Resource est préférable.

Il convient de noter que dans Spring 5.1 et versions ultérieures, @Autowired et @Qualifier ont une nouvelle fonctionnalité - Valeurs d'annotation par défaut. Autrement dit, lors de l'injection en fonction du type, le nom spécifique du bean peut être spécifié via la valeur par défaut de l'annotation @Qualifier. De cette façon, les avantages de @Resource sont affaiblis dans une certaine mesure.
@Service
public class OrderService {     @Autowired     @Qualifier("orderRepositoryImpl")     private OrderRepository orderRepository;     // ... } Par conséquent, lors de son utilisation, vous devez choisir l'annotation appropriée en fonction de la situation spécifique pour implémenter l'injection de dépendance.
    



    


Je suppose que tu aimes

Origine blog.csdn.net/weixin_65837469/article/details/130606424
conseillé
Classement