目次
Springによって管理されるオブジェクトは、デフォルトではシングルトンです。
@Scopeと@Lazyを使用して、Springによって管理されるオブジェクトのスコープを調整します。
Springによって管理されるオブジェクトのライフサイクル。
SpringFramework自動アセンブリメカニズムの2つのアセンブリモード:
自動アセンブリを実現するために2つのアノテーション@Autowiredと@Resourceを使用する場合の違い:
Springフレームワークを介して.properties構成ファイルの情報を読み取ります。
@Serviceはビジネスロジック層(サービス層)で使用されます
@Repositoryはデータアクセス層(dao層)で使用されます
@Controllerは、プレゼンテーション層で使用され、コントローラーの宣言(C)
@Resource:JSR-250によって提供されます(@Autowiredと同等)
春
【把握】
Springフレームワークの主な役割:
オブジェクトを作成し、オブジェクトを管理します。
Springフレームワークの深い役割:
デカップリング; Springが提供するIOCおよびAOP機能は、コンポーネントのカップリング、つまりデカップリングを最小限に抑えることができます。これは、システムの将来のメンテナンスとアップグレードに便利です。
Springフレームワークを介してオブジェクトを作成する
クラスのカスタムメソッドでは、メソッドの戻り値の型は、Spring Frameworkで作成する必要のあるオブジェクトの型です。作成する必要のあるオブジェクトはメソッド本体に返され、メソッドに@Bean
アノテーションが付けられます。後で、Springフレームワークがこのクラスをロードする限り、@Bean
アノテーション付きメソッドを自動的に呼び出し、メソッドによって返されるオブジェクトを管理します。一般に、管理対象のオブジェクトが属するクラスがカスタム定義されていない場合は、このアプローチを使用する必要があります。
その関連コンポーネントパッケージまたはパッケージをスキャンする子孫のクラス、クラスのニーズを保証するために、スキャン実行するようにスプリング組立体フレーム@Component
/ / /は、 @Controller
@Service
@Repository
注釈の。一般に、管理対象のオブジェクトが属するクラスがカスタム定義されている場合は、このアプローチが推奨されます。
コンポーネントスキャンについて:
コンポーネントによってスキャンされたパッケージ名は、文字列パラメーターとしてAnnotationConfigApplicationContext
クラスの構築メソッドに直接適用できますが、このアプローチを使用することはお勧めしません。実際のプロジェクト開発では、AnnotationConfigApplicationContext
クラスは通常、開発者によって作成されません。したがって、構築方法にパッケージの名前を追加する方法はありません!構成クラスとしてカスタムクラスを使用し、@ComponentScan
注釈を組み合わせてコンポーネントスキャンを構成することをお勧めします。
Springによって管理されるオブジェクトは、デフォルトではシングルトンです。
(注:Springフレームワークは、デザインモードではシングルトンモードではありませんが、オブジェクトを管理する方法は次のようになります)、遅延読み込みモードではありません(シングルトンジモシティでの空腹の中国のシングルトンの効果に相当します) )::
【理解】
Springが管理するオブジェクトのスコープを使用@Scope
および@Lazy
調整します。
Springによって管理されるオブジェクトのライフサイクル。
構成オブジェクトのライフサイクル:
-
@Bean
アノテーション付きのカスタムメソッドを使用して、@Bean
アノテーション内のオブジェクト、構成initMethod
、およびdestroyMethod
属性を返す場合は、クラス内のメソッドをそれぞれ初期化メソッドおよび破棄メソッドとして指定できます。 -
コンポーネントスキャンとコンポーネントアノテーションを使用している場合は、クラスの初期化メソッドの前にアノテーションを追加し
@PostConstruct
、破棄@PreDestroy
メソッドの前にメソッドを追加します。
SpringフレームワークのDIとIOCについて:
-
DI:依存性注入、依存性注入、特定のパフォーマンスは「現在のクラスオブジェクトが依存する特定の属性の値を注入する」です。
-
IOC:制御の反転:制御の反転。従来のモードでは、開発者はオブジェクト(たとえば
User user = new User();
)を作成し、オブジェクト(たとえばuser.setName("Jack");
)を自分で管理します。開発者がオブジェクトを制御できることは理解できます。Springフレームワークを使用すると、オブジェクトを作成および管理する権限は、フレームワークに与えられます。 -
Springフレームワークでは、DIが実践であり、IoCが最終的な効果です。つまり、「SpringフレームワークはDIを通じてIoCの効果を実現します」。
SpringFramework自動アセンブリメカニズムの2つのアセンブリモード:
-
byName
:名前に基づいて自動アセンブリを実現します。このモードでは、アセンブルする必要のある属性の名前は、Springによって管理されるオブジェクトの名前(呼び出しgetBean()
メソッドによって指定されたパラメーター名)と同じである必要があります。 -
byType
:タイプに応じて自動組立を実現。このモードでは、組立る属性のタイプが必要です。Springコンテナ内にタイプが一致するオブジェクトがあります。このメカニズムを適用する場合は、必ずあることを確認する必要があります。 Springコンテナ内の一致するタイプのオブジェクトは1つだけです。それ以外の場合は、NoUniqueBeanDefinitionException
例外が発生します。
自動アセンブリを実現するために使用するアノテーション@Autowired
と@Resource
これら2つのアノテーションの違い:
-
@Autowired
自動アセンブリを使用する場合、Springフレームワークは最初にbyType
パターンに従って一致するタイプのすべてのオブジェクトを検索します。一致するタイプのオブジェクトの数が0の場合、つまり一致するタイプのオブジェクトがない場合、エラーが発生します。デフォルトで直接報告されます(明確な構成が1の@Autowired(required=false)
場合、一致するタイプのオブジェクトの数が1の場合、直接アセンブルします。一致するタイプのオブジェクトの数が1を超える場合(2つ以上ある場合)、byName
アセンブルを試みます。、一致する名前のオブジェクトがある場合、アセンブリは成功します。一致する名前がない場合、アセンブリは失敗します。 -
@Resource
アノテーションを使用して自動アセンブリを試行する場合、動作原理は、最初byName
にアセンブリを試行し、一致する名前のオブジェクトがある場合は直接アセンブルし、一致する名前のオブジェクトがない場合はbyType
アセンブルを試行することです。
Springフレームワークを介して.properties構成ファイルの情報を読み取ります。
-
コンポーネントクラスの宣言の前に
@PropertySource
アノテーションを追加して、読み取る必要のある.propertiesファイルの場所を構成し、次に、@Value
アノテーションを介して、読み取られたプロパティ値をクラスのプロパティに1つずつ挿入します。属性のタイプが通常のタイプ(基本データタイプString
など)またはSpringフレームワークによって定義されたカスタムタイプであり、クラスの属性を次のように直接宣言できる限り、クラスのプロパティ希望するタイプ; -
コンポーネントクラスの宣言の前に
@PropertySource
コメントを追加して、読み取る必要のある.propertiesファイルの場所を構成します。次に、クラス内のEnvironment
インターフェイスタイプのオブジェクトをカスタマイズし、オブジェクトの@Autowired
値を自動的にアセンブルしてから、を呼び出します。オブジェクトのgetProperty()
メソッド。.propertiesファイルで構成されたプロパティ値を取得します。
春の一般的な注釈
@豆
Beanメソッドを生成し、管理のためにSpringコンテナに渡します。
Beanのアノテーションを宣言します
@ Controller、@ Service、@ Repository、および@Componentは、現在4つのアノテーションに対して同じ意味を持っており、違いはありません。唯一の違いは名前です。
@Componentコンポーネント、明確な役割はありません
通常のpojoをSpringコンテナにインスタンス化することは、構成ファイルの<bean id = "" class = "" />と同等です。これは、一般にさまざまなコンポーネントを参照します。
つまり、クラスがさまざまな分類に属していない場合(When @ Controller、@ Servicesなどに属していないため、@ Componentを使用してこのクラスに注釈を付けることができます。
パラメータなしのコンストラクションを呼び出してBeanオブジェクトを作成し、そのオブジェクトをSpringコンテナに格納します。これはSpringコンテナによって管理されます。xmlでBeanを構成するのと同じです。
さらに、@ controller、@ service、@ repository、および@componentによってアノテーションが付けられたクラスは、管理用のSpringコンテナーに含まれます。
@Serviceはビジネスロジック層(サービス層)で使用されます
ビジネスレイヤコンポーネントに注釈を付け、このクラスを注釈の形式でSpring構成に挿入するために使用されます
@Repositoryはデータアクセス層(dao層)で使用されます
通常、永続層の注釈に使用されます。役割は、コンテナ内のBeanに名前を付けることです
@Controllerは、プレゼンテーション層で使用され、コントローラーの宣言(C)
このクラスがSpringMVCコントローラープロセッサであることを識別します。これは、http要求を処理するためのオブジェクトを作成するために使用されます。
依存性注入と自動アセンブリ
依存性注入の本質は、依存性注入の特定の動作であるアセンブリです。
@Autowired:Spring提供
- デフォルトでは、Autowiredは最初にbyTypeを押します。複数のBeanが見つかった場合は、byNameメソッドに従ってそれらを比較します。複数のBeanがある場合は、例外が報告されます。
- null値を許可する場合は、次のように、必須属性をfalseに設定できます。@ Autowired(required = false)
- required属性は、依存性注入が必要かどうかを決定します。デフォルトはtrueです。これは、適切なタイプのBean注入がない場合に例外がスローされることを意味します。
@Resource:JSR-250によって提供されます(@Autowiredと同等)
javaxのアノテーションは、最初にbyName(デフォルトではフィールド名または入力パラメーター名で検索)、次にbyTypeの自動インジェクションを実現します。
@AutowiredはbyTypeに従って自動的に挿入され、@ ResourceはデフォルトでbyNameに従って自動的に挿入されます。@ Resourceには、より重要な2つの属性、つまりnameとtypeがあります。Springは@Resourceによって注釈が付けられたname属性を解析してBean、およびtype属性Beanのタイプに解決されます。したがって、name属性を使用する場合は、byNameの自動注入戦略が使用され、type属性を使用する場合は、byTypeの自動注入戦略が使用されます。name属性もtype属性も指定されていない場合、byName自動注入戦略がリフレクションメカニズムを通じて使用されます。
名前とタイプの両方が指定されている場合、一致するBeanのみがアセンブリのSpringコンテキストから検出され、見つからない場合は例外がスローされます。 nameが指定されている場合、名前(id)が一致するBeanがコンテキストからアセンブリーとして検索され、見つからない場合は例外がスローされます。 タイプが指定されている場合、タイプに一致する唯一のBeanがアセンブリのコンテキストで見つかります。それが見つからない場合、または複数見つかった場合は、例外がスローされます。 名前もタイプも指定されていない場合は、byNameメソッドに従ってアセンブリが自動的に実行されます。一致するものがない場合は、元のタイプにフォールバックして一致し、一致する場合は自動的にアセンブルされます。
@値
- @Valueを介して、外部値をBeanに動的に挿入でき、データを基本型データと文字列型データの変数に挿入できます
- プロパティからの構成を単純化するために、@ Valueを使用でき、プロパティファイルの構成値を使用できます。dispatcher-servlet.xmlにプロパティファイルを導入します。
Java構成クラスはソリューションを懸念しています
@ComponentScan
- クラスに作用して、パッケージパスの下のリソースをスキャンする必要があることが宣言され、その効果は<context:component-scan>と同等です。
- value(basePackages)属性は、スキャンするパッケージのパスをコンマで区切って指定します。
Beanのスコープを変更するために使用されるアノテーション
@範囲
Beanのスコープを指定します。@Scopeアノテーションは、springIocコンテナー内のスコープです。SpringIoCコンテナーには、基本スコープのシングルトン(シングルトン)、プロトタイプ(複数のケース)、Webスコープ(reqeust、session、globalsession)、カスタムスコープがあります。(@Scopeアノテーションのデフォルトのシングルトンシングルトンモード)
プロパティ:
value:
1)singleton:单例
2)prototype:多例
3)request:
4)session:
5)globalsession:
場合:
@Autowire
@Scope(value="prototype")
private UserService userService;
ライフサイクル関連の注意事項
@PostConstruct
コンストラクターとinitメソッド(存在する場合)の間で呼び出され、1回だけ実行されます。javaxのアノテーションおよび変更メソッド。このメソッドは、依存性注入後にコールバックされます。
@PreDestory
アノテーション付きメソッドは、destroy()メソッドが呼び出された後に実行されます。javaxアノテーション変更メソッド、オブジェクトがコンテナから削除される前のコールバック。
Beanを初期化して破棄する前に操作を実装するには、このアノテーションを付けることができるメソッドは1つだけであり、メソッドにパラメーターを含めることはできず、戻り値はvoidである必要があり、メソッドは非静的である必要があります。
public class Demo{
@PostConstruct
public void init(){
System.out.println("初始化");
}
@PreDestroy
public void dostory(){
System.out.println("销毁");
}
}
@レイジー
空腹のスタイルをレイジースタイルに変更します。
レイジーアノテーションにはさまざまな効果があり、多くのアノテーションと組み合わせて使用して、レイジーロードするかどうかをマークできます。
Beanの事前初期化をキャンセルするかどうかを指定するために使用されます。これは、クラスに注釈を付けて初期化を遅らせるために使用されます。
value属性はデフォルトでtrueです。つまり、デフォルトは@Lazyアノテーションが追加された後の遅延読み込みです。
@PropertySource
クラスに基づいて動作し、指定されたパスリソースを環境にロードして、インジェクションを実現します。
次に、クラスを宣言する前に、 ` @ PropertySource`を介して読み取る必要のある構成ファイルを構成します。
@PropertySource("classpath:jdbc.properties")