Почему не работает аннотация @Order в spring?
У меня имеется spring проект:
.
├── src/main/java/ua/lokha/springtest
│ ├── Bean1.java
│ ├── Bean2.java
│ ├── IBean.java
│ └── TestApplication.java
└── pom.xml
Классы Bean1 и Bean2 являются бинами и оба имплементируют интерфейс IBean. В этих бинах я сделал одинаковый init метод, который вывод в консоль сообщение:
@PostConstruct
public void init() {
System.out.println(this.getClass().getName());
}
Когда я запускаю проект, в лог выводится такой порядок загрузки бинов:
ua.lokha.springtest.Bean1
ua.lokha.springtest.Bean2
Я пробовал ставить аннотацию @Order(1) и @Order(2) в Bean1 и Bean2, пробовал менять местами эту аннотацию. И это ничего не меняло, Bean1 всегда загружается перед Bean2. Почему?
Я залил на github этот проект: https://github.com/lokha/spring-test
Ответы (1 шт):
@Order служит для указания порядка в коллекциях. Например если у вас есть
@Autowired
private List<IBean> beans;
То элементы в списке beans буду согласно порядку @Order. Для управления же порядком загрузки бинов, когда Bean1 зависит от Bean2 следует использовать @DependsOn