2015-02-06 101 views
1

当我通过依赖注入。基本基本(未注射时新的实例)

MyObject obj = new MyObject(); 

创建一个新的实例注射永远不会发生。

为MyObject的示例源可能是......

@Stateless 
public class MyObject{ 

    @Inject 
    Injection inj; 

    public MyObject() { 
    } 
    ... 
} 

不打针只是在注射对象的工作?当我明确创建一个新实例时,是否没有使用注入的方法?

我想创建一个动态创建实例的类菜单(使用反射...反射不是问题...我尝试使用new语法)。

我不想在我的菜单或主类中注入每个View类。

回答

2

注入只能在容器控制其生命周期的对象中起作用。如果您只是创建新对象,容器将如何知道对象已创建。

通常情况下,解决问题的方法是下列之一:

  • 不是自己创建的对象,但要问容器的对象。尽管在组合根外使用容器是一种应该避免的气味。
  • 自己创建对象并手动注入依赖关系。这需要创建新对象的对象有权访问它将在创建时创建的对象的所有依赖关系。这可能并不理想,所以你可以改为将创建委托给工厂类。这个类取得了创建对象所需的所有依赖关系,而你当前正在“新建”这个对象的类只是对工厂有一个依赖关系。
0

您需要使用@Named对类进行注释,以便它由IoC实例化,否则它将永远不会看到@Inject。

+0

完全依赖于他正在使用的框架。 – 2015-02-06 15:30:40

+0

确实如此。例如,在某些框架中,您可以从xml(即applicationContext.xml)中看到该类,但仍需要使框架以某种方式了解该类,然后让它实例化它,而不是使用new。 – Calabacin 2015-02-06 15:33:07