Intereting Posts

Что такое кинжал, и как он работает

Я знаю, что это может быть неправильный способ задать вопрос, но, прочитав много и много, я все еще смущен о кинжалах и о том, как это работает и почему мы должны его использовать. Поскольку он использовался в моем текущем рабочем проекте. Пожалуйста, кто-нибудь мне немного подскажет в простых словах, какова цель кинжала будет очень полезна.

благодаря

Solutions Collecting From Web of "Что такое кинжал, и как он работает"

Кинжал – это инкрементная структура зависимостей JSR-330 для компиляции, основанная на аннотациях Java .

Что такое инъекция зависимости?

Инъекция зависимостей (иногда называемая Inversion of Control или IoC) основана на идее, что данному классу не нужно знать, как создавать или предоставлять классы, от которых он зависит. Предоставление этих зависимостей должно отвечать за пользователя класса (или отдельный класс или завод).

Например, допустим, у вас есть класс A который зависит от класса B , который зависит от классов C и D (В реальных условиях это может быть приложение, которое зависит от BusinessLogicClass, которое зависит от калькулятора и базы данных.) Это может выглядеть так:

 class A { private B b = new B(); } class B { private C c = new C(); private D d = new D(); } 

… но в этот момент было бы очень сложно использовать другой C или D (калькулятор или базу данных), даже ваш B (класс бизнес-логики) должен работать с различными источниками данных или если вам нужно заменить любой из Эти части для модульного тестирования. Включение зависимостей, как концепция, говорит о том, что вы должны иметь возможность передавать зависимости в классы при их создании.

 A a = new A(new B(new C(), new D())); // Now you get an A, but can replace any part of it. 

Что такое структура внедрения инъекций?

Рамка внедрения зависимостей автоматически создает фабрики для всех ваших классов, поэтому вы можете создать A не беспокоясь о его зависимостях или зависимостях зависимостей.

 A a = new AFactory().getA(); // Equivalent to the above, but easier! 

В инфраструктурах инъекций зависимостей обычно указывается язык, в котором вы должны указывать сопоставления, которые часто называются привязками , что является всего лишь способом дать указание, что вы должны создать EImpl когда класс запрашивает EInterface или FSubclass когда класс запрашивает FClass . Этот язык также позволяет вам выбирать, когда создавать новые экземпляры: по каждому запросу, один раз через все приложение («singleton») или иначе. Spring использует XML, и Guice использует для этого собственный язык Java-классов; Кинжал использует интерфейсы, классы и аннотации Java.

Вы можете делать инъекцию зависимостей без контейнера или фреймворка, но большую часть времени люди думают о структуре, такой как Spring, Guice или Dagger, когда вы упоминаете инъекцию зависимости. Эти рамки автоматизируют много new шаблона, который вы видите выше, что в противном случае затрудняет работу с «ручной» зависимостью.

Что относительно JSR 330?

Java стандартизовал некоторые интерфейсы и аннотации как «JSR 330», чтобы упростить переход между средами внедрения зависимостей и упростить запись библиотек, которые работают в любой среде. Как Весна и Гик, Кинжал соответствует этому стандарту.

Почему это большое дело, что Кинжал является компиляцией?

Другие среды внедрения зависимостей, включая Spring и Guice, выполняют свою конфигурацию во время выполнения : они используют отражение Java для проверки конструкторов, методов и полей классов. Это может быть медленным в производстве на серверах и настольных компьютерах и чрезвычайно медленное на Android из-за различий в VM и мобильных процессоров / ограничений памяти. Следовательно, команды на Площади и Google писали Кинжал и Кинжал 2, чтобы использовать обработку аннотации Java для проверки классов во время компиляции и автоматического написания стандартного кода Java для простых объектов Java, чтобы действовать как заводы выше. Поскольку это простая Java без отражения, она может быть намного быстрее на Android и встраиваемых системах и может быть оптимизирована с использованием существующих инструментов.

Заметим также, что Кинжал был написан на площади Бобом Ли (который первоначально написал Guice в Google); Проект Dagger 2 переписывается с кинжалом, поддерживаемым в Google, который изменяет некоторые особенности настройки кинжала и того, как избежать использования рефлексии. Оба кинжала и кинжала 2 представляют собой рамки для инъекций, основанные на аннотациях, для Java, но они немного отличаются друг от друга.