Java 注入不';我不能和新接线员一起工作

Java 注入不';我不能和新接线员一起工作,java,spring,Java,Spring,有人能解释一下为什么@Inject对象的类用new运算符初始化时为空吗 public class A{ @Inject B b; ... ... } 当上面的类被创建为A=newa()时我得到b为null。有人能解释为什么吗?我知道当我注入类A时它能工作。但我想知道为什么它不能与新操作符一起工作。弹簧的作用是什么?喷油器应该如何注意到新的喷油器并对其进行操作?这是一个不能被截获的语言操作。依赖性注入由spring容器处理,因此只有容器创建的对象才会接受它 在这种

有人能解释一下为什么
@Inject
对象的类用
new
运算符初始化时为空吗

public class A{
    @Inject
    B b;
    ...
    ...
}

当上面的类被创建为
A=newa()时我得到
b
null
。有人能解释为什么吗?我知道当我注入类A时它能工作。但我想知道为什么它不能与新操作符一起工作。弹簧的作用是什么?

喷油器应该如何注意到新的喷油器并对其进行操作?这是一个不能被截获的语言操作。

依赖性注入由spring容器处理,因此只有容器创建的对象才会接受它

在这种情况下,您使用
new
操作符手动创建对象,spring容器将不知道对象的创建

一种可能的解决方案是使用
@Configurable
注释(和AspectJ)来解决此问题,如


还可以看看B将被注入到spring创建的Bean中

A a = new A();
这不是由spring创建的,这不是Springbean


在context.xml中,您需要创建一个类型为a的Bean并使用它。

Spring没有机会自动关联它自己不创建的Bean中的依赖项。依赖项注入应该由Spring容器处理。如果使用
new
创建对象,则根本不使用Spring容器。您应该为对象请求容器,而不是自己创建实例。这样,容器将在该对象的生命周期上有一个钩子

A a = new A();
这样,
a
引用的对象就不受Spring的管理。因此,它将无法将任何依赖对象注入
a

您应该从容器中获取
A
的实例,有点像这样:

ClassPathXmlApplicationContext context =
             new ClassPathXmlApplicationContext("applicationContext.xml");
A a = context.getBean("myBean");

p.S:-虽然断章取义,但这篇博客读起来不错。

尽管看起来是这样,注射并没有那么神奇。 如果使用“new”创建实例,则只需调用构造函数并处理构造函数中的代码

如何获取具有注入值的类实例取决于您使用的技术。

(有人能把这个链接移到最后一段吗?用我的手机是不可能在正确的位置通过它的)

将@Configurable添加到类中。然后Spring将向这个类注入资金,即使它是用普通的新类创建的

但这需要真正的AspectJ


有关更多详细信息,请参阅此问题和答案(开头的链接)。

您是否有可以在该字段中自动连接的can?您是否激活了组件扫描?A(tl;dr):您应该从Spring容器(即从
ApplicationContext
)实例化它,而不是
new
初始化它。这不是100%正确的。Spring甚至为“new”创建的实例提供了@Configurable Annotation(和AspectJ)注入功能。@Ralph我想你说的是我看到的,但我认为这更重要easy@A约翰尼:是的。关键是,从长远来看,黄的言论措辞像是绝对真理,而没有暗示有其他方式,将是有害的。