Является ли декоратор @Injectable угловым эквивалентом @Component или @Autowired в Spring?
Есть ли @Injectable
имею в виду
"разрешить внедрение чего-либо в класс, над которым находится декоратор"
Или же
Означает ли это "позволяет мне внедрить этот класс (который выше) в"где угодно"в приложении"?
1 ответ
@Injectable
это просто маркер, который сообщает угловому движку, что класс доступен для создания инжекторами. Во время выполнения angular говорит инжекторам прочитать все @Injectable
классы и создавать их экземпляры и делать их доступными для внедрения в классы, которые ссылаются на них.
Например, давайте предположим, что есть служба в угловой называется UserService
и вам нужно использовать этот сервис в компоненте под названием RegistrationComponent
,
@Injectable()
export class UserService {
saverUser(User user)
.....
}
Тогда в RegistrationComponent
конструктор объявляет входной параметр, который ссылается на UserService
, он сообщает angular, что UserService должен быть введен в RegistrationComponent
, конечно ранее @Injectable
маркер должен быть объявлен в UserService
RegistrationComponent.ts
export class RegistrationComponent
constructor(private userService: UserService) { }
В контексте весны @Component
играет аналогичную работу, чем @Injectable
Конечно, между ними есть много различий в реализации, но оба они играют одинаковую роль. @Component
это аннотация, которая сообщает Spring, что какой-то определенный класс должен рассматриваться как кандидат на автоопределение, и этот класс может жить в контейнере Spring. Компоненты (бины), живущие в контейнере Spring, могут быть внедрены в другие классы.
@Autowired
это не то же самое, что @Component
, @Autowired
означает, что конкретный член класса должен быть предоставлен или внедрен контейнером Spring DI.
Для получения дополнительной информации, пожалуйста, смотрите следующие ссылки: