Ich habe eine Klasse verwendet, die ich mit @Service @Scope@ Service/@-Controller Anmerkungen erstellt eine neue Bean ohne @Bean Anmerkung
@Slf4j
@Service
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ProductDataModel {
@Value("${message}")
private String message;
Der obige Code scheint ProductDataModel kommentiert haben für eine Bohne zu erstellen, ohne die @Bean Annotation zu verwenden.
Ich verwende @Autowired ProductDataModel productDataModel
in meinem Code, und die Abhängigkeit productDataModel ist nicht null, wenn mit oben genannten Stück Code verwendet.
Wie kommt es, dass der oben genannte Code Bean erstellt ??
Idealerweise würde ich nur dann zu erwarten Bean erstellt haben, wenn ich den Code unten verwenden
//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();
}
Kann jemand den Unterschied zwischen zwei Teile des Codes erklären und wann die man verwenden.
Es ist Komponente gescannt. Sie müssen keine '@ Bean' für jede Klasse/Bean angeben, die Sie verwenden möchten. Wenn Sie '@ Component' oder eine der spezialisierten Versionen wie' @ Service' auf eine Klasse setzen, wird diese automatisch beim Scannen von Komponenten erkannt. –
Wenn das der Fall ist, sollte @Bean nur verwendet werden, wenn wir Beans mit Konstruktor deklarieren oder die Lebenszyklus-Callback-Methoden wie init, cleanup etc. angeben. – Abhi
Nein, nicht wirklich, Sie können all diese Dinge ohne '@Bean machen '... –