依赖注入... Basic Basic(新实例时不注入)
Dependency Injection... Basic Basic (not injection when new instance)
当我通过
创建新实例时
MyObject obj = new MyObject();
注射从未发生。
MyObject 的示例源可以是...
@Stateless
public class MyObject{
@Inject
Injection inj;
public MyObject() {
}
...
}
注入只对注入的对象有效吗?当我显式创建一个新实例时,是否无法使用注入?
我想创建一个动态创建实例的 Class 菜单(使用反射...反射不是问题...我尝试使用 new
语法)。
我不想在我的菜单或主 class 中注入每个视图 class。
注入仅适用于容器控制其生命周期的对象。如果您只是创建新对象,容器将如何知道该对象已创建。
通常您的问题的解决方案是以下之一:
- 不是自己创建对象,而是向容器要对象。虽然在合成根之外使用容器是一种你应该避免的味道。
- 自己创建对象并手动注入依赖项。这要求创建新对象的对象在创建时可以访问将要创建的对象的所有依赖项。这可能是不可取的,因此您可以
- 将创作委托给工厂class。此 class 获取创建对象所需的所有依赖项,而 class 您当前 'newing' 中的对象仅对工厂具有单一依赖项。
您需要用@Named 注释class,以便它被IoC 实例化,否则它永远看不到@Inject。
当我通过
创建新实例时MyObject obj = new MyObject();
注射从未发生。
MyObject 的示例源可以是...
@Stateless
public class MyObject{
@Inject
Injection inj;
public MyObject() {
}
...
}
注入只对注入的对象有效吗?当我显式创建一个新实例时,是否无法使用注入?
我想创建一个动态创建实例的 Class 菜单(使用反射...反射不是问题...我尝试使用 new
语法)。
我不想在我的菜单或主 class 中注入每个视图 class。
注入仅适用于容器控制其生命周期的对象。如果您只是创建新对象,容器将如何知道该对象已创建。
通常您的问题的解决方案是以下之一:
- 不是自己创建对象,而是向容器要对象。虽然在合成根之外使用容器是一种你应该避免的味道。
- 自己创建对象并手动注入依赖项。这要求创建新对象的对象在创建时可以访问将要创建的对象的所有依赖项。这可能是不可取的,因此您可以
- 将创作委托给工厂class。此 class 获取创建对象所需的所有依赖项,而 class 您当前 'newing' 中的对象仅对工厂具有单一依赖项。
您需要用@Named 注释class,以便它被IoC 实例化,否则它永远看不到@Inject。