Spring 启动 - @Autowired 在@Service 中不工作

Spring Boot - @Autowired is not working in @Service

我有一个 HelloService(@Service) class。我正在尝试在我的 class.
中自动装配一个 ApplicationContext 成员 但它不起作用。我的 context 对象为空。

这是 HelloService Class

@Service
public class HelloService {
    @Autowired
    private ApplicationContext context;
    public String getHello(){
        if(context == null){
            return "Autowiring didn't work. No Hello from the service";
        }
        else{
            return "Hello";
        }
    }
}

我的HelloServiceclass被标记为@Service。因此现在 spring 知道它是一个 bean,它应该自动装配 ApplicationContext bean,它由 spring.

管理

以下是我验证 context 对象是否为空的方法。 我制作了一个简单的控制器 HelloController,映射到 \hello .

@RestController
public class HelloController {
    @Autowired
    private ApplicationContext context;

    @GetMapping("/hello")
    public String getHello(){
        if(context!=null)
            System.out.println("ApplicationContext object is Autowired in RestController.");

        return (new HelloService()).getHello();
    }
}

每当向 http://localhost:8080/hello 发出请求时,
我得到这样的回复:Autowiring didn't work. No Hello is there
并且这个输出在命令行

ApplicationContext object is Autowired in RestController.

我的问题:

我试过 Why is my Spring @Autowired field null? :在这个问题中,OP 没有在 class 中使用 @Service 他正在做自动装配,但我正在使用 @Service。

我尝试了很多其他问题,但都没有帮助:
Cannot Autowire Service in HandlerInterceptorAdapter

您正在使用 new 关键字创建服务 bean,因此它不起作用。不要使用 new 关键字创建该对象,而是使用自动装配或注入。即

@RestController
public class HelloController {
    @Autowired
    private ApplicationContext context;

    @Autowired
    private HelloService service;

    @GetMapping("/hello")
    public String getHello(){
        if(context!=null)
            System.out.println("ApplicationContext object is Autowired in RestController.");

        return service.getHello();
    }
}

有关autowired vs new

的更多信息