Spring 在非控制器中启动 application.properties 自定义变量 class

Spring Boot application.properties custom variable in a non-controller class

为什么 application.properties 可以在 RestController 中工作,但不能在服务中工作 class?

//application.properties
test=test

工作完美!

@RestController
public class invitecontroller {

    @Autowired inviteconfig inviteconfig;
    
    @PostMapping("/v1/invite")
    public void invite(@RequestBody XXX XXX) {

        System.out.println(inviteconfig);

    }
}

Returns“空”

@Service
public class inviteservice {
    
    @Autowired inviteconfig inviteconfig;

    public void invite() {
       System.out.println(inviteconfig);
    }
}
@Configuration
@Data
public class inviteconfig {
    private String test;
}

inviteservice class 未针对 Spring IoC(控制反转)配置为 bean,因此 Spring 不会处理 inviteservice class 生命周期。在这种情况下,@Autowired 是没有用的。

要解决此问题,请尝试将 @Component 注释添加到 invitesevice,以将其声明为组件:

@Component
public class inviteservice {
    
    @Autowired inviteconfig inviteconfig;

    public void invite() {
       System.out.println(inviteconfig);
    }
}

对于控制器,@RestController、Spring 会将您的 class 识别为 Spring 组件。

最后,不要忘记使用 Spring IoC 注入 inviteservice(使用 @Autowired 注释,或其他方式)

inviteservice class 应该用@Component 或@Service 注释

@Component 
public class inviteservice { 
...