2015-10-01 3 views

ответ

3

Все это поясняется в документации, а также на базовом курсе 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))

+0

Благодарим вас за легкое объяснение. –

+0

Без проблем, @SanchitaDharmadhikary. Я уверен, что я думал, что вы это в начальном учебном курсе :) – Vihung

2

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 и многоуровневую конфигурацию.

Смежные вопросы