我是ATG的新手,并试图理解基本概念。我阅读了许多关于它的文章,但这个概念对我而言仍然不清楚。依赖注入在ATG中如何工作?
回答
这在文档中以及基础课程中都有介绍。
在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)
方法)
谢谢你的简单解释。 –
没问题,@SanchitaDharmadhikary。我确信我在初始培训课程中认为你这么做:) – Vihung
ATG DI模型使用Nucleus来管理对象图,每个可注入bean需要配置为Nucleus组件。
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和分层配置进行配置。
- 1. 依赖注入是如何工作的?
- 2. 依赖注入不工作
- 3. 隐式依赖注入在AngularJS中如何工作?
- 4. 依赖注入在Spring中如何工作?
- 5. 如何在symfony /依赖注入中使自动布线工作?
- 6. 依赖注入在黄瓜中如何工作?
- 7. 依赖注入工作单元
- 8. Laravel依赖注入不工作
- 9. 依赖注入Spring框架 - 工作
- 10. strucutreMap依赖注入不工作
- 11. 简单的依赖注入不工作
- 12. Spring依赖注入停止工作
- 13. 工匠依赖注入
- 14. 依赖注入与工厂
- 15. 依赖注入和工厂
- 16. 依赖注入和工厂
- 17. C#依赖注入 - 如何注入无源的依赖关系?
- 18. 如何注入d3依赖?
- 19. 依赖注入在Quartz工作预定的类上不工作
- 20. 依赖注入
- 21. 依赖注入
- 22. 依赖注入
- 23. 依赖注入
- 24. 依赖注入
- 25. 依赖注入
- 26. 使用依赖注入来注入依赖注入器
- 27. 工厂模式在依赖注入
- 28. 如何使组件的依赖注入工作
- 29. 如何使用工作单元实例化依赖注入?
- 30. AngularDart依赖注入是如何工作的?
你甚至读过ATG帮助吗? – bated