Spring 引导自动装配失败 - 空

Spring Boot Autowired failed - null

我有 3 个 类,它们位于 spring 启动应用程序的不同包中,如下所示: 为什么 @Autowired 仅在某些 类 中有效?我做错了什么吗?

@Configuration
public class Configurations{
   @Autowired
   Prop prop;  //works fine

   @Bean
   //other bean definitions

}

@Component
public class Prop{
   public void method(){};
}

public class User{
   @Autowired
   Prop prop;  //does not work, null

   public void doWork(){
      prop.method();
   }

}

我也试过@PostConstruct,但结果一样

public class User{
       @Autowired
       Prop prop;  //does not work, null

       @PostConstruct
       public void doWork(){
          prop.method();
       }

    }

只有当 Spring 检测到 class 本身应该是一个 Spring bean 时,@Autowired 注释才起作用。

在您的第一个示例中,您使用 @Configuration 注释对 Configurations 进行了注释。另一方面,您的 User class 没有说明它应该是 Spring bean 的注释。

有多种注释(具有不同的含义)可以使您的 class 被 Spring 容器拾取,例如 @Service@Component@Controller, @Configuration, ...但是,这仅在您的 class 位于由 Spring 容器扫描的包裹中时有效。使用 Spring 引导,最简单的保证方法是将 User class 放在主 class 的(子)包中(class 注释@SpringBootApplication).

您也可以通过在 Configurations 中编写以下方法来手动创建您的 bean:

@Bean
public User user() {
    return new User();
}

在这种情况下,您不必注释您的 User class,也不必确保它在被扫描的包裹中。