Я новичок в ATG и пытаюсь понять основные концепции. Я читал много статей об этом, но концепция до сих пор не ясна для меня.Как работает инъекция зависимости в ATG?
ответ
Все это поясняется в документации, а также на базовом курсе Foundation.
В ATG вы определяете «компоненты». Это с именем экземпляров данного класса.
Вы определяете эти компоненты, используя .properties
. Путь и имя файла свойств по отношению к корню конфигурации становится именем вашего компонента.
.properties
файла содержит имя класса, который будет инстанцирован
Файл также определяет объем экземпляра, то есть ли, когда экземпляр, объект должен существовать только для текущего запроса, текущая сессия, или длительности приложения (0)
Кроме того, вы можете определить любые значения свойств для вашего компонента. Они могут быть по значению (особенно для примитивных типов данных) или по ссылке на другой компонент по имени.
Когда вы запускаете экземпляр ATG EAR, запускается ядро. Ядро является контейнером для бобов и отвечает за жизненный цикл компонентов, определенных в нем.
Nucleus создает компоненты, когда компоненты впервые доступны. Процесс создания экземпляра следующий (упрощенно)
- Nucleus создаст экземпляр объекта, вызвав конструктор без аргумента класса.
- Компонент будет присвоен имя, полученное из его местоположения файла
.properties
и сохраненное в указанной области. - Затем Nucleus будет проходить через все свойства, определенные в файле
.properties
, и вызвать методsetXXX(...)
объекта, чтобы установить значения. - Для объектов по значению (определяется значением в файле свойств) свойство будет установлено непосредственно.
- Для объектов по ссылке (определяемых именем компонента Nucleus в файле свойств) ссылочный компонент будет просматриваться в соответствующей области, и если он существует, то он будет установлен в свойстве. Если указанный компонент не был создан экземпляр еще, то ядро будет ненасытный этот компонент первого (после той же процедуры для этого компонента), а затем установить, что объект будет расположен на территории
Этот последний шаг, как ATG делает инъекцию зависимости.
Короче говоря, это означает, что если ваш класс A имеет зависимость от экземпляра класса B, то в качестве разработчика вы не пишете код для создания экземпляра класса B или для поиска и привязки к экземпляр класса B. До тех пор, пока вы выполняете основные требования [1], вы пишете свой код для класса A с неявным предположением, что вам всегда будет дано значение класса B. Затем вы настраиваете экземпляр класса B как компонент , экземпляр класса A в качестве компонента, и вы ссылаетесь на свойство класса A на экземпляр класса B, а Nucleus гарантирует, что при выполнении кода в классе A он уже будет введен с допустимым экземпляром класса B .
[1] Класс A и B должны иметь конструкторы без аргументов, класс A должен иметь записываемый пр. операци типа B (т.е. он должен иметь метод public void setB(B myB)
)
Благодарим вас за легкое объяснение. –
Без проблем, @SanchitaDharmadhikary. Я уверен, что я думал, что вы это в начальном учебном курсе :) – Vihung
Модель ATG DI использует Nucleus для управления графом объектов, и каждый инжектируемый компонент должен быть сконфигурирован как компоненты Nucleus.
Foo.java
package my.foopackage;
import my.custompackageCustomClass.CustomClass;
public class Foo {
private CustomClass customClass;
public void setCustomClass (CustomClass customClass){
this.customClass = customClass;
}
public CustomClass getCustomClass() {
return customClass;
}
}
CustomClass.java
package my.custompackageCustomClass;
public class CustomClass {
private String myProperty;
public void setMyProperty (CustomClass myProperty){
this.myProperty = myProperty;
}
public CustomClass getMyProperty() {
return myProperty;
}
}
Foo.properties
$class=my.foopackage.Foo
$scope=global
customClass=/path/to/configuration/file/ofYourWantedCustomClass/CustomClass
CustomClass.properties
$class=my.custompackageCustomClass.CustomClass
$scope=global
myProperty=myProperty1
Обратите внимание, что у вас может быть несколько файлов свойств для ваших компонентов. например: CustomClass1.properties, CustomClass2.properties и т. Д., И у вас могут быть разные значения для String myProperty. Это помогает мне думать, что это как второй уровень полиморфизма (на уровне экземпляра), но основное отличие состоит в том, что все компоненты настраиваются через/dyn/admin и многоуровневую конфигурацию.
- 1. Как работает инъекция зависимости?
- 2. Как работает инъекция зависимости AngularDart?
- 3. Как работает инъекция зависимости конструктора в Laravel?
- 4. Угловая инъекция зависимости не работает
- 5. инъекция зависимости Dagger
- 6. инъекция Динамической среды зависимости
- 7. Что означает инъекция зависимости?
- 8. инъекция Динамической зависимости
- 9. Инъекция весенней зависимости
- 10. инъекция зависимости Laravel/МОК
- 11. Инъекция динамической зависимости
- 12. инъекция зависимости osgi между сервисами
- 13. Как работает инъекция зависимостей весной?
- 14. Как работает инъекция зависимости AngularJS с тестированием контроллера?
- 15. Как работает инъекция зависимостей конструктора?
- 16. Как узнать, работает ли сайт в ATG?
- 17. инъекция зависимости netcore на пользователя
- 18. Что делает инъекция пружинной зависимости?
- 19. инъекция зависимости php с контейнером
- 20. инъекция зависимости C++ с фруктами
- 21. Реагирующая инъекция зависимости или аналогичная?
- 22. инъекция Простой автоматической зависимости в Laravel
- 23. Общая инъекция зависимости типа: Как вводить T
- 24. Инъекция autowired зависимости потерпела неудачу в коте
- 25. Локальная инъекция зависимости в ошибке angular.js
- 26. Весенняя инъекция в зависимости от определенного свойства
- 27. Существует ли инъекция зависимости в Rails?
- 28. Grails: инъекция зависимости в обычном классном классе
- 29. ASP.NET Core IdentityDbContext с использованием зависимости Инъекция
- 30. Создать экземпляр по значению перечисления + инъекция зависимости
Вы даже прочитали справку по ATG? – bated