💡 Java-совет: выбирай constructor injection вместо field injection Во многих проектах до сих пор можно встретить такое: @Component public class UserCo…
Во многих проектах до сих пор можно встретить такое:
@Component
public class UserController {
@Autowired
private Logger logger;
public void createUser(String username) {
...
}
}
Работает, но хуже тестируется и прячет зависимости «за кулисами».
Гораздо лучше - передавать зависимости через конструктор:
@Component
public class UserController {
private final Logger logger;
@Autowired
public UserController(Logger logger) {
this.logger = logger;
}
}
Почему это лучше:
• зависимости явно видны
• класс становится иммутабельным
• проще писать unit-тесты (можно подставить fake/mock)
• меньше сюрпризов при инициализации Spring-контейнера
Итог: если нет веской причины - предпочитай constructor injection 👍