@Order en primavera

1. Información general

En este tutorial, aprenderemos sobre la anotación @Order de Spring . La anotación @Order define el orden de clasificación de un componente o bean anotado.

Tiene un argumento de valor opcional que determina el orden del componente; el valor predeterminado es Ordered.LOWEST_PRECEDENCE . Esto marca que el componente tiene la prioridad más baja entre todos los demás componentes ordenados.

De manera similar, el valor Ordered.HIGHEST_PRECEDENCE se puede usar para anular la prioridad más alta entre los componentes.

2. Cuándo usar @Order

Antes de Spring 4.0, la anotación @Order se usaba solo para la orden de ejecución de AspectJ. Significa que el consejo de mayor orden se ejecutará primero.

Desde Spring 4.0, admite el pedido de componentes inyectados a una colección. Como resultado, Spring inyectará los beans cableados automáticamente del mismo tipo según el valor de su pedido.

Exploremos con un ejemplo rápido.

3. Cómo utilizar @Order

Primero que nada, configuremos nuestro proyecto con la interfaz y las clases relevantes.

3.1. Creación de interfaz

Creemos la interfaz de Calificación que determina la calificación de un producto:

public interface Rating { int getRating(); }

3.2. Creación de componentes

Finalmente, creemos tres componentes que definan las calificaciones de algunos productos:

@Component @Order(1) public class Excellent implements Rating { @Override public int getRating() { return 1; } } @Component @Order(2) public class Good implements Rating { @Override public int getRating() { return 2; } } @Component @Order(Ordered.LOWEST_PRECEDENCE) public class Average implements Rating { @Override public int getRating() { return 3; } }

Tenga en cuenta que la clase Average tiene la prioridad más baja debido a su valor anulado.

4. Prueba de nuestro ejemplo

Hasta ahora, hemos creado todos los componentes necesarios y la interfaz para probar la anotación @Order . Ahora, probémoslo para confirmar que funciona como se esperaba:

public class RatingRetrieverUnitTest { @Autowired private List ratings; @Test public void givenOrder_whenInjected_thenByOrderValue() { assertThat(ratings.get(0).getRating(), is(equalTo(1))); assertThat(ratings.get(1).getRating(), is(equalTo(2))); assertThat(ratings.get(2).getRating(), is(equalTo(3))); } }

5. Conclusión

Hemos aprendido sobre la anotación @Order en este artículo rápido. Podemos encontrar la aplicación de @Order en varios casos de uso, donde el orden de los componentes cableados automáticamente es importante. Un ejemplo son los filtros de solicitud de Spring.

Debido a su influencia en la precedencia de la inyección, puede parecer que también podría influir en el orden de inicio de singleton. Pero, por el contrario, las relaciones de dependencia y las declaraciones @DependsOn determinan el orden de inicio de singleton.

Todos los ejemplos mencionados en este tutorial se pueden encontrar en Github.