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约翰尼:是的。关键是,从长远来看,黄的言论措辞像是绝对真理,而没有暗示有其他方式,将是有害的。