- Внедрение через конструктор
- Внедрение в стиле поля (в Spring, inject() в Angular)
Код: Выделить всё
@Autowired
Однако последние лучшие практики в Angular отдают предпочтение функции inject(), а не внедрению конструктора.
Поначалу На первый взгляд эти подходы концептуально похожи (внедрение зависимостей в поля, а не через параметры конструктора), но рекомендации противоположные.
Код: Выделить всё
@Injectable()
export class AngularFieldInjectionService {
// Angular: Field-style injection - encouraged ✅
private myDep = inject(MyAngularDependency);
}
// vs.
@Injectable()
export class AngularConstructorInjectionService {
// Angular: Constructor injection - discouraged ❌
constructor(private myDep: MyAngularDependency) {}
}
Код: Выделить всё
@Service
class SpringFieldInjectionService {
// Spring: Field-style injection - discouraged ❌
@Autowired
private MySpringDependency myDep;
}
// vs.
@Service
class SpringConstructorInjectionService {
private MySpringDependency myDep;
// Spring: Constructor injection - encouraged ✅
public MySpringService(MySpringDependency myDep) {
this.myDep = myDep;
}
}
- Почему внедрение конструктора предпочтительнее в Spring, а не в Angular?
- Чем метод Angular inject() отличается от внедрения поля Spring с использованием @Autowired?