Explicación detallada de la diferencia entre @Autowired y @Resource

1. Configuración @Autowired
Primero se presenta la configuración de la anotación @Autowired, a través de la cual se puede realizar la dependencia del Bean autowired. Por ejemplo, la siguiente clase OrderService instancia e inyecta su objeto OrderRepository dependiente a través de la anotación @Autowired:
@Service
public class OrderService {     @Autowired     private OrderRepository orderRepository;     // ... } Cabe señalar que, de forma predeterminada, @ Autowired realizará inyección de dependencia por tipo. Si hay varios beans del mismo tipo en el contenedor, se lanzará una excepción. En este momento, si necesita especificar un Bean específico, puede usar la anotación @Qualifier para lograrlo.
    


    



@Service
public class OrderService {     @Autowired     @Qualifier("orderRepositoryImpl")     private OrderRepository orderRepository;     // ... } Además, también puede usar la anotación @Autowired en constructores, métodos Setter y otros métodos personalizados para inyección de dependencia. @Service public class OrderService {     private OrderRepository orderRepository;     @Autowired     public OrderService(OrderRepository orderRepository) {         this.orderRepository = orderRepository;     }     /**      * Setter injection.      */     @Autowired     public void setOrderRepository(OrderRepository orderRepository ) {
    



    





    

    




    





        this.orderRepository = orderRepository;
    }
    
    /**
     * Inyección de método personalizado.
     */
    @Autowired
    public void injectOrderRepository(OrderRepository orderRepository) {         this.orderRepository = orderRepository;     }     // ... } 2. Configuración de @Resource A continuación, introduzca @Resource La configuración de anotaciones también puede darse cuenta de la dependencia del ensamblaje automático de beans. En comparación con @Autowired, usa nombres para la inyección de dependencia.


    



Por ejemplo, la siguiente clase OrderService instancia e inyecta su objeto OrderRepository dependiente a través de la anotación @Resource:


@Service
public class OrderService {     @Resource(name = "orderRepositoryImpl")     private OrderRepository orderRepository;     // ... } Debe tenerse en cuenta que, de forma predeterminada, el nombre del bean coincidirá con el nombre de la propiedad. Si necesita especificar un nombre, puede usar el atributo de nombre para configurarlo.
    


    


Al mismo tiempo, @Resource también admite el atributo de tipo, que puede realizar una inyección de dependencia según el tipo. Por ejemplo el siguiente código:


@Service
public class OrderService {     @Resource(type = OrderRepository.class)     private OrderRepository orderRepository;     //... } 3. Comparación de diferencias En resumen, la diferencia entre los dos está principalmente en la forma de inyección de dependencia.
    


    



Para @Autowired, realiza una inyección de dependencia según el tipo. Si hay varios beans del mismo tipo, debe usar @Qualifier para distinguirlos. Y @Resource realiza la inyección de dependencias según el nombre o tipo, y lo configura a través del atributo nombre o tipo.

En uso, ambos pueden darse cuenta de la dependencia de los beans de cableado automático, pero los escenarios de uso son ligeramente diferentes. En general, si solo necesitamos inyectar por tipo, entonces se prefiere @Autowired. Si necesita inyectar por nombre o tipo, se prefiere @Resource.

Cabe señalar que en Spring 5.1 y versiones posteriores, @Autowired y @Qualifier tienen una nueva función: valores de anotación predeterminados. Es decir, al inyectar según el tipo, el nombre específico del Bean se puede especificar a través del valor predeterminado de la anotación @Qualifier. De esta manera, las ventajas de @Resource se debilitan hasta cierto punto.
@Service
public class OrderService {     @Autowired     @Qualifier("orderRepositoryImpl")     private OrderRepository orderRepository;     // ... } Por lo tanto, al usarlo, debe elegir la anotación adecuada según la situación específica para implementar la inyección de dependencia.
    



    


Supongo que te gusta

Origin blog.csdn.net/weixin_65837469/article/details/130606424
Recomendado
Clasificación