Spring Notes 4--Beanを実現するための構築方法、Beanオブジェクトのスコープについて話し合う

以前の記事を見ていない場合、私はあなたが見てみる示唆
HelloSpring、コンテキスト、IOCコンテナ、豆3-続行春注
。前のセクションでは、我々は春にBeanオブジェクトがインスタンス化されるかについての質問を残した。
我々オブジェクトを作成する方法はたくさんあることを知ってください。たとえばパラメーターの構築なしパラメーターの構築リフレクション(基本的に、クラスのコンストラクターを取得するためのnewInstance()メソッドを介して)、Objectクラスのcloneメソッド(呼び出しないコンストラクター、使用するオブジェクトがあることを前提としているため、不可能です)、逆シリアル化...
これらは単なる推測です。実際のコードで検証します。

1.インスタンスオブジェクトへのパラメータまたはパラメータはありませんか?

新しいテンプレートを作成し、自分で名前を付け、青いjavaの下にパッケージを作成し、私のパッケージは(com.ysj.study)と呼ばれ、次のようにパッケージの下にクラスHelloDemo1を作成します
ここに画像の説明を挿入
(IDEAユーザーの場合は、左Altキーを押します+挿入キーは、ワンクリックでパラメータ化された構造とゲッターおよびセッターメソッドをすばやく書き込むことができます、IDEAnb)

package com.ysj.study;

@SuppressWarnings("ALL")
public class HelloDemo1 {
    
    

    private String name;

    public HelloDemo1(){
    
    
        System.out.println("HelloDemo1的 无 参构造");
    }

    public HelloDemo1(String name) {
    
    
        System.out.println("HelloDemo1的 有 参构造");
        this.name = name;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }
}

それでも、resourcesフォルダーの下にbeans.xmlファイルを作成して、基本的な構成情報コードをインポートします。
ここに画像の説明を挿入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

次に、以下のBeanのID作成コードを記述します。
ここに画像の説明を挿入
古いメソッドで、テストクラスコード(当面は@Testアノテーションなし)を記述し、以下のテストフォルダーの下のjavaフォルダーにmyTest
IDEAを作成してから、CPXと入力します。プロンプトが表示されます。
ここに画像の説明を挿入
ここに画像の説明を挿入

出力結果:
ここに画像の説明を挿入

上記の出力から、Beanのデフォルトのインスタンス化オブジェクトがたどるルートがクラスであることを確認するのは難しくありません。パラメータなしの構築

オブジェクトをインスタンス化するための2つのパラメータ化された構造

クラスのパラメータ化された構造を使用してクラスをインスタンス化する必要がある場合があります。これは、このオブジェクトの一部のデータをインスタンス化できるためです(パラメータ化されたBeanの使用方法を学ぶためだけに、setterメソッドもすべて初期化できるのは事実です。構造)

<constructor-arg name="有参构成参数名" value="所需要赋的值"/>

ここに画像の説明を挿入
結果をもう一度出力してみましょう。
ここに画像の説明を挿入
これは、パラメーター構成にパラメーターが1つしかない場合です。複数のパラメーターがある場合でも、使用法は上記と同じです。コンストラクター引数タグをさらにいくつか記述してください。

同時に、setterメソッドを削除しても、Beanはプロパティインジェクションを完了できることがわかりました。

したがって、Beanのパラメーター化された構成は、プロパティのセッターメソッドに依存しません。
BeanFactoryでbean-idを作成する方法もあります。前回ブログに書くのを忘れてしまいました。興味があれば自分でチェックしてみてください。とても重要です。


3.毎回取得するBean-idのオブジェクトは同じですか?

多くの人は、私たちまたはidオブジェクトがJavaコードに転送されるたびに、同じオブジェクトになるのではないかと思うでしょう。たとえば
、次のテストコードを見てください
ここに画像の説明を挿入
。helloDemo1とhelloDemo2とhelloDemo3は同じオブジェクトですか?つまり、オブジェクトかどうかを判断します。オブジェクトアドレスのHashCodeを確認できます。HashCodeが同じ場合は同じオブジェクト、それ以外の場合は別のオブジェクトです
。HashCodeを個別に出力して、同じかどうかを確認してみましょう。
ここに画像の説明を挿入
実際には、同じオブジェクトです。
同じオブジェクトの利点は、メモリを節約し、開発効率を向上させることができることです。これは、シングルトンモードと呼ばれます
が、欠点があります。複数のコピーが必要になる可能性があるため、このオブジェクトをメモリ内で一意にしたくない場合があります。さまざまなオブジェクトを実現できますが、どうすればよいですか?

第4に、IOC内のオブジェクトのライフサイクルとモードの変更

オフィシャルは、IOCコンテナ内のオブジェクトのパターン図を提供します。
ここに画像の説明を挿入
これは、シングルトン(シングルトンモード)、プロトタイプ(プロトタイプモード)、リクエスト(リクエストモード)、セッション(セッションモード)、アプリケーション(アプリケーションモード)、ウェブソケット(通信)です。モード)
実際、それが何と呼ばれるかはそれほど重要ではありません。そして、私たちは学んでいる開始され、私たちは現在、最初の2つだけ(シングルトンとプロトタイプモード)と接触しているが、戻って私たちはspringmvcを学ぶことができているとき、javaweb以降が使用され、spring5ある
し、我々は具体的にについて話シングルトンモードプロトタイプモード

シングルトン(シングルトンモード):毎回作成されるオブジェクトがグローバルに一意であり
メモリ内にプロトタイプ(プロトタイプモード)が1つしかないという制約:毎回作成されるオブジェクトが異なり、メモリ内に複数の独立したコピーがあるという制約

シングルトンモード:
ここに画像の説明を挿入
プロトタイプモードの
ここに画像の説明を挿入
IOCコンテナは、各クラスオブジェクトの作成にデフォルトでシングルトンモードになります。これは、Javaの外部で取得されたすべてのオブジェクトのHashCodeが同じである理由も説明しています。特定のクラスのIOCコンテナの場合、インスタンスモードはどうですか。内部

scope="模式名称"

ここに画像の説明を挿入
結果をもう一度出力し、各オブジェクトのHashCode
ここに画像の説明を挿入
出力結果を見て、すべて証明しましょう。
このセクションは以上です。知識はゆっくりとO(∩_∩)Oを吸収します。

おすすめ

転載: blog.csdn.net/YSJ367635984/article/details/113176622
おすすめ