1. Спрингу в любом случае так или иначе нужно задать, что какой-то объект (класс) является бином. Это надо делать и в случае с аннотациями, и в случае с xml конфигурацией. Более того - так работают все DI фреймворки, которые я знаю. "Само" оно никогда частью DI не станет. Всегда нужно что-то делать руками.
2. Под классом, помеченным
@Configuration можно создавать несколько бинов, которые ссылаются друг на другу, как зависимости. При этом такие ссылки можно обозначать просто вызовом метода (в примере кода ниже см. метод getProjectTreeService())
По коду можно немного поменять
1)
@Configuration тянет за собой и
@Component. Вторую аннотацию можно убрать
2) Смешивать спринговые и JSR-330 аннотации МОЖНО, но я не понимаю зачем? См. в ProjectTreeService, как можно сделать со спринговыми
3) Почитать об этом можно конечно же в официальной доке
3.1) как работает IoC контейнер спринга (лучше всю главу целиком)
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#spring-core 3.2) если всю главу целиком читать лень, то есть часть, касающаяся только аннотацией:
https://docs.spring.io/spring/docs/5.1.5.RELEASE/spring-framework-reference/core.html#beans-java Пример:
https://pastebin.com/hwSJ199T