【发布时间】:2015-10-01 05:53:29
【问题描述】:
我是 ATG 的新手,并试图理解基本概念。我阅读了很多关于它的文章,但我仍然不清楚这个概念。
【问题讨论】:
-
你读过 ATG 的帮助吗?
标签: atg
我是 ATG 的新手,并试图理解基本概念。我阅读了很多关于它的文章,但我仍然不清楚这个概念。
【问题讨论】:
标签: atg
这一切都在文档中进行了解释,也在基础基础课程中。
在 ATG 中,您定义“组件”。这些是给定类的命名实例。
您可以使用.properties 文件定义这些组件。属性文件的路径和名称(相对于配置根目录)成为组件的名称。
.properties 文件包含要实例化的类的名称
该文件还定义了实例的范围,即一旦实例化,该对象是否应该只存在于当前请求、当前会话或应用程序的持续时间(全局)
此外,您可以为组件定义任何属性值。这些可以按值(特别是对于原始数据类型)或按名称引用另一个组件。
当您启动 ATG EAR 的实例时,启动的是 Nucleus。 Nucleus 是一个 bean 容器,负责其中定义的组件的生命周期。
Nucleus 在组件第一次被访问时实例化组件。实例化的过程如下(大大简化了)
.properties 文件位置,并保存在指定范围内。.properties 文件中定义的所有属性,并在对象上调用setXXX(...) 方法来设置值。 这最后一步是 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) 方法)
【讨论】:
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 和分层配置进行配置。
【讨论】:
ATG DI 模型使用 Nucleus 管理对象图,每个可注入 bean 都需要配置为 Nucleus 组件。
【讨论】: