ホームページ > Java > &#&チュートリアル > spring-: @configuration-in-depth

spring-: @configuration-in-depth

Barbara Streisand
リリース: 2025-01-28 22:06:15
オリジナル
438 人が閲覧しました

spring-: @Configuration-in-depth

in -springフレームワークでの@configurationアノテーションの詳細な理解

スプリングフレームワークのアノテーションは、クラスによって定義されたクラスをマークするために使用されます。 SpringのJavaベースの構成では、この注釈は非常に重要です。

クラスが@Configurationアノテーションを使用すると、Springはそれを構成クラスとして扱い、処理してSpring Beanを生成および管理します。このタイプには、通常、1つ以上の

アノテーションが含まれています。

@Configuration @Bean @Configurationのコアコンセプト


クラスを構成クラスとしてマークしますこのクラスはBeanの定義のソースになり、Springはこれらの定義を使用してアプリケーションコンテキストを設定します。
  • 代理店のメカニズム

    スプリングは、cglibベースのサブクラス(プロキシ)を生成して、

    メソッドがデフォルトで同じ単一の例インスタンスを返すようにします。この動作は、完全なモード
  • と呼ばれます。エージェントを実行しない場合は、
  • メソッドを複数回呼び出すと、複数のインスタンスが作成される場合があります。

    コンポーネントと統合されています

    @Bean (または注釈付きのクラス)で@Beanを使用すると、

    アノテーションのクラスは明示的に定義でき、スプリングは他の豆を自動的にスキャンして登録することができます。
  • 注入

    を許可します

    クラスは、ビーンの作成に必要な依存関係アイテムを解決するために、コンストラクターまたはフィールドベースに基づいた依存関係の注入をサポートします。 @ComponentScan @SpringBootApplication @Configuration

  • 基本的な例
  • @bean Method

    :Beanを明示的に定義します。

    @Configurationシングルエクサムの動作

  • がを呼び出しても、エージェンシーメカニズムのために、
    beanは1回のみ作成されます。

    <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>
    ログイン後にコピー
    ログイン後にコピー
      ベストプラクティス
    • 1。 関数(dataConfig、serviceconfig、webconfigなど)によれば、構成は複数のクラスに分割されます。これにより、読みやすさとメンテナンスが向上します。
    • 2。 外部構成ソース(application.propertiesまたはapplication.ymlなど)を使用し、myController()またはmyService()注入値を使用します。 MyService
    3。
    すべての豆を表示しないでください。

    register

    コンポーネントを使用してください。

    4。

    または
    <code class="language-java">@Configuration
    public class DataConfig {
        @Bean
        public DataSource dataSource() {
            // 配置并返回数据源
        }
    }
    
    @Configuration
    public class ServiceConfig {
        @Bean
        public UserService userService() {
            return new UserServiceImpl();
        }
    }</code>
    ログイン後にコピー
    ログイン後にコピー
    の注釈を使用して、条件付きでBeanを定義し、特定の環境または構成でBeanのみをロードします。

    <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。 を使用して、構成属性をグループ化して、分散型注釈を最小限に抑えます。

    @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>
    ログイン後にコピー
    ログイン後にコピー

    手動でインスタンス化された豆

      クラスに豆を作成しないでください。Springの依存関係注入とライフサイクル管理をバイパスするためです。
    1. 間違った執筆:@Configurationnew

    サイクロン依存性相互に依存する豆を定義するときは、循環依存性を引き起こすため、注意してください。

    <code class="language-java">@Configuration
    public class AppConfig {
    
        @Value("${app.name}")
        private String appName;
    
        @Bean
        public AppService appService() {
            return new AppService(appName);
        }
    }</code>
    ログイン後にコピー
    ソリューション:
      コードを再構築して、注入または使用するように
    1. を使用します。
    @Beanメソッド

    再ロードの注釈方法を避けてください。 @Lazy

    エージェントの制限
    1. クラスが最終的でない場合、

      の機関メカニズムは効果的ではありません。構成クラスを最終的にマークしないでください。 @Bean

      @componentを慎重に使用してください
    2. 同じクラスで
    3. の混合を避けます。処理方法が異なるため、これは予期しない動作につながる可能性があります。 @Configuration

    4. 注入の高度な例を使用
    5. @Componentに頼って:各豆は別の豆に依存し、スプリングは依存関係の関係を自動的に解決します。 @Configuration @Configurationは、Bean および Beanによって再利用できます。Beanは複数のサービス間で再利用できます。


    要約

    目的
    <code class="language-java">@Configuration
    @ComponentScan(basePackages = "com.example.myapp")
    public class AppConfig {
        // 必要时使用显式Bean
    }</code>
    ログイン後にコピー
      は、濃縮およびタイプのセキュリティ方法でBeanを定義できます。
    • ベストプラクティス:構成をモジュール化し、外部化された属性を使用し、Springの注釈(
    • など)を使用します。
    • 避ける必要があるトラップ:手動でインスタンス化された豆、サイクル依存関係、重い負荷DataSourceメソッド、およびJdbcTemplateファイナルを使用します。
    これらのプラクティスに従うことにより、
    を使用して、強力で簡単なスプリングアプリケーションを構築することができます。

    以上がspring-: @configuration-in-depthの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート