2015-10-01 34 views

回答

3

这在文档中以及基础课程中都有介绍。

在ATG中,您定义了“组件”。这些是命名为给定类的实例。

您可以使用.properties文件来定义这些组件。属性文件的路径和名称(相对于配置根)成为组件的名称。

.properties文件包含类的名称被实例化

该文件还定义了实例的范围内,即,是否,一旦实例化,对象应该只存在当前请求,当前会话,或应用程序的持续时间(全局)

此外,您可以为组件定义任何属性值。这些可以通过值(特别是对于基本数据类型)或通过引用另一个组件,按名称。

当您启动一个ATG EAR的实例时,它是启动的Nucleus。 Nucleus是一个bean容器,负责其中定义的组件的生命周期。

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和分层配置进行配置。