Spring @Component无法自动接线

时间:2019-12-10 17:33:03

标签: java spring autowired

我创建了一个类,并用 @Component 进行了注释,并且该类在正确的软件包下,它将进行组件扫描。但是,如果我尝试自动连线,则无法注入。这是我的配置。

@Component
@ConfigurationProperties(prefix = "request-default-values")
public class DefaultConfig {

 //Getters and setters

} 

我在哪里上课

@Component
public class ProcessRequest {

    @Autowired
    DefaultConfig defaultConfig;

    @Autowired
    SalesForceService salesForceService;

    public String getUpdateRequest(String req) {

        // defaultConfig is coming as null

    }
}

上面的类在根包com.bb.app下

我的spring主要应用程序

@SpringBootApplication(scanBasePackages = {"com.bb.app"})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
   }
}

我还有什么想念的吗?

2 个答案:

答案 0 :(得分:2)

@Component public class ProcessRequest {}

spring如何知道如何使用自动装配的bean创建ProcessRequest?您可以通过指定它也是spring托管bean来要求它。您忘了给班级添加注释。

答案 1 :(得分:0)

每个您要注入bean的Java类也必须是Spring托管的bean,即使未在其他任何地方显式使用它。

根据项目的大小,我还是建议您使用显式配置。例如,这将起作用:

@Configuration
public class ApplicationConfiguration {
  @Bean
  public ProcessRequest processRequest() {
    return new ProcessRequest();
  }

  @Bean
  public DefaultConfig defaultConfig() {
    return new DefaultConfig();
  }
} 

然后,在您的主方法类上,

@SpringBootApplication(scanBasePackageClasses = ApplicationConfiguration.class)
public class Application { ... }

或者,仅使用@Component

注释所有Spring托管的bean。

此外,如果此配置类只不过是属性,则应查看@ConfigurationProperties