Utilización de la anotación @Order en Spring

Anotación @Order con Spring

Anotación @Order con Spring


En esta nueva entrada vamos a ver la Utilización de la anotación @Order en Spring. La anotación @Order en Spring se utiliza para especificar el orden de ejecución de los componentes o beans dentro del contexto de la aplicación.

¿Cuándo usar la anotación @Order en Spring?

La anotación @Order en Spring se utiliza cuando se necesita establecer un orden específico de ejecución para los componentes en una aplicación. Algunos casos comunes en los que se puede utilizar esta anotación incluyen:

  1. Ordenar la ejecución de aspectos: Si se utilizan aspectos en la aplicación y es necesario controlar el orden en que se aplican, se puede utilizar @Order para definir el orden de ejecución de los aspectos.
  2. Configuración de filtros de servlet: En el contexto de aplicaciones web, se pueden usar filtros de servlet para realizar operaciones específicas antes o después de que una solicitud llegue a un servlet. @Order se puede utilizar para especificar el orden en que se aplican los filtros.
  3. Ordenar la inicialización de beans: Si hay beans que dependen de la inicialización de otros beans en el contexto de la aplicación, se puede usar @Order para asegurar que los beans se inicialicen en el orden deseado.
  4. Establecer el orden de ejecución de tareas programadas: Si se utilizan tareas programadas (por ejemplo, con @Scheduled), @Order se puede utilizar para determinar el orden en que se ejecutan las tareas.

En resumen, se debe usar la anotación @Order en Spring cuando se requiera un control específico del orden de ejecución de los componentes en la aplicación.

¿Cómo usar la anotación @Order en Spring?

Cuando múltiples componentes en Spring tienen la misma prioridad y es necesario establecer un orden específico para su ejecución, se puede utilizar @Order para definir el orden relativo entre ellos. El valor numérico proporcionado a @Order determina el orden ascendente, donde un valor menor indica una prioridad más alta. La anotación @Order se añade en el componente ya se a nivel de clase o a nivel de método.

Para indicar el Order más alto de preferencia de carga de un componente en Spring (que sería el valor menor) podemos hacer uso de Ordered.HIGHEST_PRECEDENCE y para indicar la precedencia menor de un componente podemos hacer uso de Ordered.LOWEST_PRECEDENCE.

Vamos a ver un ejemplo de uso de @Order.

Ejemplo de @Order en Spring

Por ejemplo, supongamos que tenemos tres componentes A, B y C, y queremos que se ejecuten en un orden específico. Podemos agregar la anotación @Order a cada componente de la siguiente manera:

public interface OrderExample {
    String saySomething();
}
@Component
@Order(1)
@Slf4j
public class A implements OrderExample {

    @Override
    public String saySomething() {
        return "I am class A";
    }
}

@Component
@Order(2)
@Slf4j
public class B implements OrderExample {
    @Override
    public String saySomething() {
        return "I am class B";
    }
}

@Component
@Order(3)
@Slf4j
public class C implements OrderExample {
    @Override
    public String saySomething() {
        return "I am class C";
    }
}

Como hemos indicado anteriormente la prioridad de los componentes va de menor a menor, es decir, el componente con menor valor tiene mayor prioridad. En nuestro caso el componente con mayor prioridad será Class A seguido de Class B y finalmente Class C.

Vamos a crear un test para ver el orden en el que se inyectan los componentes:

Test del uso de @Order en Spring

A continuación vamos a verificar que el orden de inyección en el contexto de las tres clases anteriores es A->B->C.

public class OrderExampleTest { 
    
    @Autowired
    private List<OrderExample> orderExamples;
    
    @Test
    public void givenOrder_whenInjected_thenByOrderValue() {
        assertTrue(orderExamples.get(0).saySomething().equalsIgnoreCase("I am class A"));
        assertTrue(orderExamples.get(1).saySomething().equalsIgnoreCase("I am class B"));
        assertTrue(orderExamples.get(2).saySomething().equalsIgnoreCase("I am class C"));
    }
}

Conclusión

En esta entrada sobre Utilización de la anotación @Order en Spring hemos visto la utilidad de hacer uso de @Order en una aplicación Spring para cargar componentes o Bean en función de nuestra necesidad. La anotación @Order nos permite establecer el orden de carga de los componentes en el Contexto de Spring.

Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *