im Depth Verständnis der @Configuration Annotation im Spring -Framework
@Configuration
Anmerkungen im Spring -Framework werden verwendet, um eine von einer Klasse definierte Klasse zu markieren. In der Java -basierten Konfiguration von Spring ist diese Annotation sehr wichtig.
Wenn eine Klasse @Configuration
Anmerkungen verwendet, behandelt Spring sie als Konfigurationsklasse und verarbeitet sie, um Federbohnen zu generieren und zu verwalten. Dieser Typ enthält normalerweise eine oder mehrere @Bean
Anmerkungen.
markieren Sie die Klasse als Konfigurationsklasse
Diese Klasse wird zur Quelle der Bean -Definition, und Spring verwendet diese Definitionen, um den Anwendungskontext festzulegen.
Spring erzeugt die CGGLIB -basierte Sub -Class (Proxy), um sicherzustellen, dass die
-Methode standardmäßig dieselbe einzelne Beispielinstanz zurückgibt. Dieses Verhalten heißt vollständiger Modus. Wenn Sie keinen Agenten ausführen, können Sie die @Bean
-Methode mehrmals aufrufen, um mehrere Instanzen zu erstellen.
@Bean
bei Verwendung mit (oder in einer Klasse mit Anmerkungen) verwendet wird, kann die Klasse von Annotationen explizit definiert werden, und die Frühling kann automatisch andere Bohnen scannen und registrieren.
@ComponentScan
@SpringBootApplication
Ermöglichen Sie die Injektion @Configuration
grundlegendes Beispiel
@Configuration
<code class="language-java">import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } @Bean public MyController myController() { return new MyController(myService()); } }</code>
myController()
myService()
MyService
gemäß Funktionen (wie Dataconfig, ServicEConfig und WebConfig) wird die Konfiguration in mehrere Klassen aufgeteilt. Dies verbessert die Lesbarkeit und Wartung. 3. Verwenden Sie @Componentscan, um
<code class="language-java">@Configuration public class DataConfig { @Bean public DataSource dataSource() { // 配置并返回数据源 } } @Configuration public class ServiceConfig { @Bean public UserService userService() { return new UserServiceImpl(); } }</code>
und @Value
Komponenten. @ConfigurationProperties
<code class="language-java">@Configuration public class AppConfig { @Value("${app.name}") private String appName; @Bean public AppService appService() { return new AppService(appName); } }</code>
, um die Bohnen bedingt zu definieren, und nur die Bean in einer bestimmten Umgebung oder Konfiguration geladen. @ComponentScan
<code class="language-java">import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } @Bean public MyController myController() { return new MyController(myService()); } }</code>
Anmerkungen zu minimieren. @ConfigurationProperties
@Value
<code class="language-java">@Configuration public class DataConfig { @Bean public DataSource dataSource() { // 配置并返回数据源 } } @Configuration public class ServiceConfig { @Bean public UserService userService() { return new UserServiceImpl(); } }</code>
@Configuration
new
Falsches Schreiben: Cyclonabhängigkeit
Seien Sie vorsichtig, wenn Sie eine gegenseitig abhängige Bean definieren, da sie eine Zirkulationsabhängigkeit verursacht.<code class="language-java">@Configuration public class AppConfig { @Value("${app.name}") private String appName; @Bean public AppService appService() { return new AppService(appName); } }</code>
Die @Bean -Methode Vermeiden Sie die @Lazy
Annotationsmethode des Re -Loading, da sie unerwartete Ergebnisse verursachen kann.
Agentenbeschränkungen Der Agenturmechanismus von @Bean
ist nicht wirksam, wenn die Klasse nicht endgültig ist. Vermeiden Sie es, die Konfigurationsklasse zu endgültig zu markieren.
Verwenden Sie @Component sorgfältig Mischen und @Configuration
in derselben Klasse. Dies kann zu unerwarteten Verhaltensweisen führen, da die Verarbeitungsmethode
Verwenden erweiterte Beispiele für Injekte @Component
@Configuration
@Configuration
<code class="language-java">@Configuration @ComponentScan(basePackages = "com.example.myapp") public class AppConfig { // 必要时使用显式Bean }</code>
DataSource
JdbcTemplate
Best Practice @Configuration
Das obige ist der detaillierte Inhalt vonSpring-: @configuration-in-tiefe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!