コメントの仕方によってSpring構成ビーン(II)

1に、基本的なアノテーションベースの設定ビーンについて話しましたが、豆は、それぞれとの間に関連はなかった、と今、私たちは次のような機能を実現したいです。

ベースディレクトリ:

UserController.java

この呼び出しは、メソッドのUserServiceのを追加します。

パッケージcom.gong.spring.beans.annotation.controller。

輸入org.springframework.stereotype.Controller; 

輸入com.gong.spring.beans.annotation.service.UserService。

@Controller 
パブリック クラスUserControllerで{
     プライベートUserServiceのUserServiceの。
    公共 ボイドは(){を実行
        するSystem.out.printlnは( "UserControllerでは、方法を実行的" )。
        userService.add(); 
    } 
}

UserService.java

この呼び出しは、メソッドのUserRepositoryを保存します。

パッケージcom.gong.spring.beans.annotation.service。

輸入org.springframework.stereotype.Service。

輸入com.gong.spring.beans.annotation.repository.UserRepository。

@Service 
パブリック クラスUserServiceの{
     プライベート; UserRepository userRepository
    公共 ボイド追加(){ 
        System.out.printlnは( "UserServiceの中的方法の追加" )。
        userRepository.save(); 
    } 
}

UserRepository.java

パッケージcom.gong.spring.beans.annotation.repository。

パブリック インターフェイスUserRepository {
     公共 のボイド(保存)。
}

UserRepositoryImpl.java

パッケージcom.gong.spring.beans.annotation.repository。

輸入org.springframework.stereotype.Repository。

@Repository(値 = "userRepository" パブリック クラス UserRepositoryImpl 実装UserRepository { 

    @Override 
    公共 ボイド(セーブ){
         // TODO自動生成方法スタブ 
        のSystem.out.println( "UserReposityImpl的は方法保存" )。
    } 

}

Main.java

パッケージcom.gong.spring.beans.annotation。

輸入org.springframework.context.ApplicationContext;
輸入org.springframework.context.support.ClassPathXmlApplicationContext; 

輸入com.gong.spring.beans.annotation.controller.UserController; パブリック クラスメイン{
     公共 静的 ボイドメイン(文字列[]引数){
         // 1创建バネ的IOC容器对象 
        のApplicationContext CTX = 新しい ClassPathXmlApplicationContext( "豆-annotation.xml" )。
        // 2.从容器中获取豆实例 
        UserControllerでUserControllerで=(UserControllerで)ctx.getBean( "UserControllerで" );
        System.out.println(UserControllerで)。
     userController.execute(); 
    } 
    
}

豆-annotation.xml

<?= "1.0"エンコード= "UTF-8" XMLバージョン?> 
< のxmlns = "http://www.springframework.org/schema/beans" 
    のxmlns:XSI = "http://www.w3.org/2001 / XMLスキーマ・インスタンス" 
    のxmlns:コンテキスト= "http://www.springframework.org/schema/context" 
    XSI:のschemaLocation =" http://www.springframework.org/schema/beansのhttp://www.springframework。 ORG /スキーマ/豆/春-beans.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd」> 
        
    <! - - 配置springIOC容器扫描的包- >     
    < コンテキスト:> 
    </ コンテキスト:コンポーネントスキャン> 

</ >

前のセクションでは、通常の配置、印刷出力結果:

我々はUserControllerででUserServiceのプロパティを組み立てていないので、NULLポインタ例外が報告されます。

コンポーネントアセンブリ:<コンテキスト:コンポーネント・スキャン>自動的に自動的にリソースと@Inject注釈特性@、@ Autowiredで組み立てることができるAutowiredAnnotationBeanPostProcessorインスタンスを登録します。

タイプと互換性のある単一の自動組立Beanプロパティを使用して@Autowired注釈:

  • コンストラクタ:通常のフィールドも非パブリック、すべてのパラメータは、メソッド@Autowiredアノテーションで使用することができます。
  • デフォルトでは、@Autowiredアノテーションを使用してすべての属性を設定する必要があります。春は、プロパティを組み立てるために任意のBeanを一致しませんでした場合は、例外がスローされます。プロパティがセットに許可されていない場合は、falseに@Autowired注釈に必要な属性を設定することができます。
  • デフォルトでは、ときに複数種類の互換性の豆springIOC容器は、自動組立タイプで動作しません。この時点で、あなたは可能で豆@Qualifierノートの名前を提供しますメソッドは、指定された噴射パラメータにばねが豆の@Qualifier名前を表記可能。
  • @Autowired注釈は、属性のデータ・タイプに適用されてもよいし、スプリングは、すべてのBean自動組立に一致します。
  • @Autowired注釈がプロパティのコレクションに適用されてもよいし、種類情報セットスプリング読み出し、その後豆の自動組立てと互換性のあるすべての。
  • マップ文字列のキーは、次いで、ばねアセンブリ値型地図豆、このときのキーのビーン名で自動的に互換性がある場合、@Autowired jav.util.Mapで使用される場合。

話はそんなに、それは@Autowiredを使用すること、であるプロパティは自動的に対応するBeanに装着させて、次のようになります。

@Autowired
 プライベートUserServiceのUserServiceの。
@Autowired 
プライベート UserRepository userRepository。

だから、あなたは通常、出力を実行することができます。

もちろん、別の方法ではなく財産よりも、注釈のための@Autowired setterメソッドにあるがあり、すなわち、:

    プライベートUserRepository userRepository。
    @Autowired 
    公共 ボイドsetUserRepository(UserRepository userRepository){
         この .userRepository = userRepository。
    }

また、これは可能です。

TestObject.java

パッケージcom.gong.spring.beans.annotation。

輸入org.springframework.stereotype.Component; 

@Component 
パブリック クラスTestObject { 

}

次は中userRepositoryImplを追加しました:

パッケージcom.gong.spring.beans.annotation.repository。

輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.stereotype.Repository。

輸入com.gong.spring.beans.annotation.TestObject; 

(値@Repository = "userRepository" パブリック クラス UserRepositoryImpl 実装UserRepository { @Autowired
    
    
    プライベートTestObject testObject。

    @Override 
    公共 無効{)(SAVE
         // TODO自動生成されたメソッドスタブ 
        のSystem.out.println( "UserReposityImpl的には方法救います" );
       System.out.println(testObject)。
    }

}

プログラムが実行されます。

私達は@Component削除コメントでTestObjec.java:

警告:コンテキストの初期化中に発生した例外 - リフレッシュの試行をキャンセル:org.springframework.beans.factory.UnsatisfiedDependencyException:エラー名「UserControllerで」を持つBeanの作成:フィールド「UserServiceの」を通して表現不満の依存関係を、ネストされた例外はorg.springframework.beans.factory.UnsatisfiedDependencyExceptionある:エラー「UserServiceの」名前の豆作成:0パラメーターメソッド「setUserRepository」を通して表現不満依存性を、ネストされた例外はorg.springframework.beans.factory.UnsatisfiedDependencyExceptionです:「userRepository」名前を持つBeanの作成エラー:フィールド「testObject」を通して表現不満の依存関係を、ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです:いいえは、型「com.gong.spring.beansの豆を修飾します。annotation.TestObject」利用可能:autowire候補者としての資格を少なくとも1豆期待。依存注釈:{@ org.springframework.beans.factory.annotation.Autowired(必須=真)}

我々が設定しているため。

@Autowired
 プライベート TestObject testObject。

豆を見つけられませんでした、それは例外がスローされます。

私たちのプラス:説明プロパティをインストールする必要はありません

(必要= @Autowired プライベート TestObject testObject。

このとき、何のフィッティングTestObjectは投げないではないにもかかわらず、すなわち、

私たちは、その後、UserJdbcRepository.javaを作成します(;; System.out.printlnは(testObject)私たちは、@Autowired(必要= false)をプライベートTestObject testObjectを削除しました)

パッケージcom.gong.spring.beans.annotation.repository。

輸入org.springframework.stereotype.Repository。

@Repository 
パブリック クラス UserJdbcRepository 実装UserRepository { 

    @Override 
    公共 のボイド(保存){
         // TODO自動生成されたメソッドスタブ 
        のSystem.out.println( "UserJdbcRepository的には方法救います" ); 
    } 

}

:同時に値プロパティは、実行が例外をスローします@Repository(値=「userRepository」)を削除しませ単一Beanを

より多くのBean実装クラスよりがある場合、我々はつまり、あなたが呼び出すときに名前を呼び出し、Beanの名前を指定する必要があります。

    プライベートUserRepository userRepository。
    @Autowired 
    公共 ボイドsetUserRepository(UserRepository userRepository){
         この .userRepository = userRepository。
    }

それとも私たちは、組み立てられたBean名を指定します。

    プライベートUserRepository userRepository。
    @Autowired 
    @Qualifier( "userJdbcRepository" 公共 ボイドsetUserRepository(UserRepository userRepository){
         この .userRepository = userRepository。
    }

出力:

ノートはまた、setterメソッドに入れることができます。

    private UserRepository userRepository;
    @Autowired
    public void setUserRepository(@Qualifier("userJdbcRepository") UserRepository userRepository) {
        this.userRepository = userRepository;
    }

@Resource和@Inject和@Autowired类似,一般使用@Autowired就足够了。

おすすめ

転載: www.cnblogs.com/xiximayou/p/12157120.html