Answers:
生成不同实体的原因不同:
代理 -用于延迟加载。但是每种类型都需要单独的代理类,这对于开发人员手动编写它们,从而使Magento生成它们很烦人。您只会在di.xml中找到对代理的引用
Factory-是用于创建不可注射(实体)的类。与代理相同。PHP还没有泛型,因此我们会自动生成工厂,而不是让开发人员编写样板代码。您将通过Magento代码与工厂进行交互。您很可能需要为实体创建自己的工厂。只需在构造函数中请求相应的工厂,它将在下一次运行或在编译器运行期间生成。
Interceptor-是Interception组件使用的基础结构类。正如Flyingmana和Phil Winkle所注意的那样,您无论如何都不应该与他们互动。
生成了许多其他实体(例如用于对象图分析模式的Logger),但是这三个实体最重要。
Magento 2也可以编译。编译使DI和Intercept更快。所有代码生成和编译都可以通过dev / tools / Magento / Tools / Di / compiler.php完成
这就是Magento如何为新平台生成面向方面的方法的方式。通过实际生成事件之前,周围和之后,而不是动态地调度它们。这在程序员的便利性和平台性能之间取得了平衡。
诸如自动依赖项注入之类的某些技术被展平到生成的类中,而不是通过反射执行-再次-这是一种提高性能的技术。
Magento\Cms\Block\Block
构造函数中使用的实例\Magento\Cms\Model\BlockFactory
。该类不在代码中。仅在中找到var/generation
。因此,如果我正在执行类似的模块,则可能必须使用类似的类。