我有一个我用@Service @Scope
注释的课程@Slf4j
@Service
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ProductDataModel {
@Value("${message}")
private String message;
上面的代码似乎是为ProductDataModel创建一个bean,而不使用@Bean注释。
我在我的代码中使用@Autowired ProductDataModel productDataModel
,并且当与上面的代码一起使用时,依赖关系productDataModel不为null。
上面的代码是如何创建bean的?
理想情况下,我希望只有在使用下面的代码时才能创建bean
//I am not using this piece of code in my program., for reference only
@Configuration
public class OSCConfig {
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
ProductDataModel productDataModel(){
return new ProductDataModel();
}
有人可以解释两段代码之间的区别以及何时使用哪一段代码。
答案 0 :(得分:1)
作为@M。 Deinum指出,当我们声明@Service或@Controller注释时,我们不需要为每个类指定@Bean,如果为该包启用了组件扫描,它们将被Spring Container选中。
使用@Bean的好用例可能就是那个
答案 1 :(得分:0)
在扫描要创建的对象时(作为包扫描的一部分),Spring会选择@Service注释。它是spring @Component注释的一个特化,但除了向用户提供有关其预期用途的指示之外,并没有真正添加其他内容。 @Controlller注释类似,但创建的bean具有特定的特征。
在创建对象时也使用了@Bean注释,在此上下文中,它位于Configuration类中的方法上,因此创建的bean是该方法返回的类型。