2015-10-01 2 views

Répondre

3

Tout cela est expliqué dans la documentation, ainsi que dans le cours de base de base.

Dans ATG, vous définissez des 'composants'. Ce sont nommés instances d'une classe donnée.

Vous définissez ces composants à l'aide des fichiers .properties. Le chemin et le nom du fichier de propriétés, relatif à une racine de configuration, devient le nom de votre composant.

Le fichier .properties contient le nom de la classe à instancier

Le fichier définit également la portée de l'instance, à savoir si, une fois instancié, l'objet doit exister que pour la demande en cours, la session en cours, ou la durée de l'application (globale)

En outre, vous pouvez définir des valeurs de propriété pour votre composant. Ceux-ci peuvent être en valeur (en particulier pour les types de données primitifs) ou en référence à un autre composant, par nom. Lorsque vous démarrez une instance d'un ATG EAR, c'est le Nucleus qui est démarré. Le noyau est un conteneur de grains et est responsable du cycle de vie des composants qui y sont définis.

Le noyau instancie des composants lors de l'accès initial aux composants. Le processus d'instanciation est le suivant (simplifié considérablement)

  • Le noyau créera l'instance d'objet en appelant le constructeur sans argument de la classe.
  • Le composant recevra le nom, dérivé de son emplacement de fichier .properties et conservé dans la portée spécifiée.
  • Le noyau parcourra ensuite toutes les propriétés définies dans le fichier .properties et appellera la méthode setXXX(...) sur l'objet pour définir les valeurs.
  • Pour les objets par valeur (définie par valeur dans le fichier de propriétés), la propriété sera définie directement.
  • Pour les objets par référence (définis par le nom d'un composant Nucleus dans le fichier de propriétés), le composant référencé sera recherché dans la portée appropriée et s'il existe, il sera défini sur la propriété. Si le composant référencé n'a pas encore été instancié, le Nucleus sera insatiables que premier composant (suivant la même procédure pour ce composant), puis définissez cet objet sera mis sur la propriété

Cette dernière étape est de savoir comment ATG fait l'injection de dépendance. En résumé, cela signifie que si votre classe A dépend d'une instance de classe B, en tant que développeur, vous n'écrivez pas le code pour instancier la classe B, ou pour rechercher et lier un instance de classe B. Tant que vous remplissez les conditions de base [1], vous écrivez votre code pour la classe A avec l'hypothèse implicite que vous recevrez toujours une valeur de classe B. Vous configurez ensuite une instance de classe B en tant que composant , une instance de la classe A en tant que composant et vous référencez la propriété de la classe A à l'instance de la classe B, et le noyau veillera à ce que le code de la classe A soit déjà injecté avec une instance valide de classe B

[1] Les classes A et B doivent avoir des constructeurs sans argument, la classe A doit avoir un pr l'opacité du type B (par ex. il doit avoir une méthode public void setB(B myB))

+0

Merci pour une explication facile. –

+0

Pas de problème, @SanchitaDharmadhikary. Je suis sûr que je vous ai pensé dans le cours de formation initiale :) – 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 

Notez que vous pouvez avoir plusieurs fichiers de propriétés pour vos composants. Par exemple: CustomClass1.properties, CustomClass2.properties etc. et vous pourriez avoir des valeurs différentes pour String myProperty. Cela m'aide à le considérer comme une seconde couche de polymorphisme (au niveau de l'instance) mais la principale différence est que tous les composants sont configurables via/dyn/admin et la configuration en couches.