Spring Boot Autowired失败 - null

时间:2016-10-11 04:47:43

标签: spring-boot autowired

我在Spring启动应用程序的不同包中找到了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();
   }

}

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

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

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

    }

1 个答案:

答案 0 :(得分:5)

只有当Spring检测到类本身应该是一个Spring bean时,Configurations注释才有效。

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

有各种注释(具有不同的含义)使您的类被Spring容器拾取,一些示例是@Component@Controller@ConfigurationUser ,......但是,这仅适用于您的类位于Spring容器正在扫描的包中。使用Spring启动时,最简单的方法是将@SpringBootApplication类放在主类的(子)包中(使用Configurations注释的类)。

您还可以通过在@Bean public User user() { return new User(); } 中编写以下方法来手动创建bean:

User

在这种情况下,您不必为function isNumberKeyDecimal(evt) { var charCode = (evt.which) ? evt.which : event.keyCode if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46) return false; return true; } 课程注释,也不必确保它在正在扫描的包中。