Spring Boot Autowired失败 - null

Akz*_*tch 2 autowired spring-boot

我有一个在春季启动应用程序的不同包中找到的3个类,如下所示:为什么@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();
   }

}
Run Code Online (Sandbox Code Playgroud)

我也试过了@PostConstruct,但结果相同

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

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

    }
Run Code Online (Sandbox Code Playgroud)

g00*_*00b 5

@Autowired仅当Spring检测到类本身应该是Spring bean时,注释才有效.

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

有各种注解(具有不同的含义),使被拾起你的等级达到由Spring容器,有些例子是@Service,@Component,@Controller,@Configuration,....但是,这仅适用于您的类位于Spring容器正在扫描的包中.使用Spring引导,最简单的方法是将您的User类放在主类(带有注释的类)的(子)包中@SpringBootApplication.

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

@Bean
public User user() {
    return new User();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不必为您的User类添加注释,也不必确保它位于正在扫描的包中.