我是ATG的新手,并试图理解基本概念。我阅读了很多关于它的文章,但这个概念对我来说仍然不清楚。
答案 0 :(得分:3)
这一切都在文档中以及基础课程中进行了解释。
在ATG中,您定义了'组件'。这些是给定类的命名实例。
您可以使用.properties
文件定义这些组件。相对于配置根的属性文件的路径和名称将成为组件的名称。
.properties
文件包含要实例化的类的名称
该文件还定义了实例的范围,即,一旦实例化,对象是否应仅存在于当前请求,当前会话或应用程序的持续时间(全局)
此外,您还可以为组件定义任何属性值。这些可以是值(特别是对于原始数据类型)或通过名称引用另一个组件。
启动ATG EAR的实例时,启动的是Nucleus。 Nucleus是一个bean容器,负责其中定义的组件的生命周期。
首次访问组件时,Nucleus会实例化组件。实例化的过程如下(大大简化)
.properties
文件位置,并保留在指定范围内。.properties
文件中定义的所有属性,并在对象上调用setXXX(...)
方法来设置值。 最后一步是ATG如何进行依赖注入。
简而言之,这意味着如果您的类A依赖于类B的实例,那么作为开发人员,您不会编写代码来实例化类B,或者查找并绑定到实例只要满足基本要求[1],就可以编写A类代码,并隐含假设您将始终获得B类的值。然后将B类实例配置为组件,作为组件的类A的实例,您将类A的属性引用到类B的实例,并且Nucleus将确保当类A中的代码执行时,它已经被注入了类B的有效实例。
[1] A类和B类必须具有无参数构造函数,类A必须具有类型B的可写属性(例如,它必须具有public void setB(B myB)
方法)
答案 1 :(得分: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和分层配置进行配置。
答案 2 :(得分:1)
ATG DI模型使用Nucleus来管理对象图,每个可注入的bean都需要配置为Nucleus组件。