Является ли декоратор @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.

Для получения дополнительной информации, пожалуйста, смотрите следующие ссылки:

Инъекция угловой зависимости

@Autowired Spring Documentation

@Component Spring Документация

Другие вопросы по тегам