gpt4 book ai didi

java - 可以使用 @Autowire @Service beans 但不能使用 "new"关键字实例化类的成员 - 即使配置了上下文扫描

转载 作者:行者123 更新时间:2023-11-30 04:59:54 25 4
gpt4 key购买 nike

我有一个与 @Autowired @Service beans 配合良好的应用程序。

现在我添加一个在 Controller 中实例化的 Validator 类:

BlueValidator validator = new BlueValidator(colors);
validator.validate(colorBlend, bindResult);

BlueValidator 类中,我尝试 @Autowire blendService ,它在应用程序其他位置用作 @Autowired 字段:

public class BlueValidator implements Validator {
@Autowired
private BlendService blendService;
private Colors colors;

但由于某种原因,在实例化 BlueValidator 后,我不断收到 blendServiceNullPointerException

当然,我添加了必要的上下文扫描:

<context:component-scan 
base-package="com.myapp.controllers, com.myapp.services, com.myapp.validators" />

我还尝试将@Autowired注释添加到构造函数,但这没有帮助:

@Autowired
public BlueValidator(Colors colors) {
this.colors = colors;
}

我应该将 blendService 传递给 BlueValidator 并忘记 Autowiring ,还是这里明显缺少一些东西?

最佳答案

如果您只是使用 new 实例化一个对象,Spring 不会参与其中,因此 Autowiring 不会启动。组件扫描会查看类并从中创建对象 - 它不会查看类您自己创建的对象。

使用 Spring's AspectJ support 可以使这个工作 ,但这需要一些努力。

否则,如果您希望 Autowiring 工作,则需要让 Spring 实例化您的对象。

Should I just pass the blendService to the BlueValidator and forget about the Autowiring

根据您的情况,我会说是的,这是最省力的解决方案。

关于java - 可以使用 @Autowire @Service beans 但不能使用 "new"关键字实例化类的成员 - 即使配置了上下文扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com