Heim >Java >javaLernprogramm >Spring-: @configuration-in-tiefe

Spring-: @configuration-in-tiefe

Barbara Streisand
Barbara StreisandOriginal
2025-01-28 22:06:15443Durchsuche

spring-: @Configuration-in-depth

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.


@Konfiguration Core Concept

  1. markieren Sie die Klasse als Konfigurationsklasse

    Diese Klasse wird zur Quelle der Bean -Definition, und Spring verwendet diese Definitionen, um den Anwendungskontext festzulegen.

  2. Der Agenturmechanismus

    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

    in Komponenten integriert
  3. Wenn

    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

  4. Klasse unterstützen die Abhängigkeitsinjektion basierend auf Konstruktor oder Feld -basiert, um das zum Erstellen von Bean erforderliche Abhängigkeitselement zu lösen.
  5. grundlegendes Beispiel

    @Configuration

  6. @bean Methode
: explizit Bean definieren.

einzelnes -Beispiel -Verhalten

: Auch wenn
<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>
aufnimmt
    , aufgrund des Agenturmechanismus,
  • Bean nur einmal erstellt.
  • Best Practice 1. Modulare Konfiguration myController() myService() MyService gemäß Funktionen (wie Dataconfig, ServicEConfig und WebConfig) wird die Konfiguration in mehrere Klassen aufgeteilt. Dies verbessert die Lesbarkeit und Wartung.

2. Vermeiden Sie den Hartcodierungswert

Verwenden Sie die externe Konfigurationsquelle (z. B. application.Properties oder application.yml) und verwenden Sie den Injektionswert oder .

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>

zu scannen Zeigen Sie nicht alle Bohnen an, verwenden Sie Register

,

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>
4. Verwenden Sie Bedingungen Bean

Verwenden Sie oder

Annotationen wie

, 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>

5. organisatorische Anwendungsattribute

Verwenden Sie , um das Konfigurationsattribut zu gruppieren, um die dezentralen

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>
Die Angelegenheiten, die zu beachten sind

Verwenden Sie die manuelle instanziierte Bean
    verwenden Sie nicht
  1. , um Bean in der -Klasse zu erstellen, da es die Abhängigkeitsinjektion und das Lebenszyklusmanagement der Frühlingsabläufe umgeht. @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>
  1. Lösung: rekonstruieren den Code, um ihn in die Eingabe oder Verwendung zu injizieren.

Die @Bean -Methode Vermeiden Sie die @Lazy Annotationsmethode des Re -Loading, da sie unerwartete Ergebnisse verursachen kann.

  1. 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.

  2. Verwenden Sie @Component sorgfältig Mischen und @Configuration in derselben Klasse. Dies kann zu unerwarteten Verhaltensweisen führen, da die Verarbeitungsmethode

    unterschiedlich ist.
  3. Verwenden erweiterte Beispiele für Injekte @Component @Configuration @Configuration

    In
  4. verlassen: Jede Bean hängt von einer anderen Bean ab. Die Frühling löst automatisch die Abhängigkeitsbeziehung.

kann von Bean

:

wiederverwendet werden und
<code class="language-java">@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class AppConfig {
    // 必要时使用显式Bean
}</code>
Bean kann zwischen mehreren Diensten wiederverwendet werden.
  • Zusammenfassung
  • Zweck : Ermöglicht die Definition von Bean in einer konzentrierten und Typ -Sicherheitsmethode. DataSource JdbcTemplate Best Practice
  • : Modularisieren Sie die Konfiguration, verwenden Sie externalisierte Attribute und verwenden Sie die Annotationen von Spring (wie
und
).

Die Falle, die vermieden werden muss
    : Manuell instanziierte Bean, Zyklusabhängigkeiten, schwere Last
  • Methoden und verwenden die endgültige. @Configuration
  • Durch die Befolgung dieser Praktiken können Sie
  • effektiv verwenden, um eine starke und einfache Anwendung zu -ANTAINAIN -Feder zu erstellen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn