我在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();
}
}
答案 0 :(得分:5)
只有当Spring检测到类本身应该是一个Spring bean时,Configurations
注释才有效。
在您的第一个示例中,您使用@Configuration
注释对User
进行了注释。另一方面,你的@Service
类没有注释,表明它应该是一个Spring bean。
有各种注释(具有不同的含义)使您的类被Spring容器拾取,一些示例是@Component
,@Controller
,@Configuration
,User
,......但是,这仅适用于您的类位于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;
}
课程注释,也不必确保它在正在扫描的包中。