ホームページ > Java > &#&チュートリアル > Java でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?

Java でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?

PHPz
リリース: 2023-04-19 10:07:02
転載
1518 人が閲覧しました

Spring は単にオブジェクトを読み取って保存するだけです

Bean オブジェクトの取得 (オブジェクト アセンブリ)

Bean オブジェクトの取得はオブジェクト アセンブリとも呼ばれます。これは、オブジェクトを取り出して保存することを意味します。どこかに置く クラスではオブジェクトインジェクションと呼ばれることもあります。

オブジェクト アセンブリ (オブジェクト インジェクション) を実装するには、次の 3 つの方法があります。

  • 属性インジェクション

  • 構築メソッドインジェクション

  • セッター インジェクション

最初に次のパッケージとクラスを作成します。

Java でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?

属性注入

属性注入は @Autowired を使用して実装され、Service クラスは Controller

クラスに注入されます。

@Controller
public class StudentController {
    // 1.使用属性注入的方式获取 Bean
    @Autowired
    private StudentService studentService;

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}
ログイン後にコピー
利点:

実装が簡単で使いやすい。

欠点:

  • 機能上の問題:不変 (final

    ) オブジェクトを挿入します。

Java でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?

Java の最終オブジェクト (不変) 値を直接割り当てるか、またはコンストラクターで値を割り当てるため、属性を使用して Final オブジェクトを注入する場合、Java の Final の使用仕様に準拠していないため、注入は成功しません。
  • 汎用性の問題: IoC

    コンテナにのみ適応可能。
  • 設計原則の問題: 違反が容易になる単一の設計原則 (クラスであるオブジェクトの場合)

#単一の設計原則:

  • #クラス レベルの場合

  • メソッドレベルの場合

コンストラクターメソッドインジェクション

Spring 4.x以降、Spring公式ですコンストラクター インジェクションの形式を使用することをお勧めします。

@Controller
public class StudentController {
    // 2.构造方法注入
    private StudentService studentService;
    
    // @Autowired 可省略
	@Autowired
    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}
ログイン後にコピー

# Note

  • @Autowired

    省略可能
  • #ただし、クラス内に複数のコンストラクターがある場合は、使用するコンストラクターを明確に指定するために @Autowired を追加する必要があります。エラーが報告されます。

利点:

  • 不変オブジェクトを挿入できます。

Java でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?

  • 挿入されたオブジェクトは変更されません。

    • 追加されました final 変更記号。

    • 構築メソッドは、クラスがロードされるときに 1 回だけ実行されます。

  • ##注入されたオブジェクトは次のようになります。 (構築方法によるメリットを利用する)

  • 汎用性の向上

デメリット:

属性インジェクションを使用しない場合、実装は単純です。

Setter インジェクション

Setter インジェクションは、属性の Setter メソッド実装と似ていますが、次のことが異なります。 @Autowired Annotation.

@Controller
public class StudentController {
    // 3.setter 注入
    private StudentService studentService;

    @Autowired
    public void setStudentService(StudentService studentService) {
        this.studentService = studentService;
    }

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}
ログイン後にコピー

利点:

は、単一の設計原則により沿っています。(オブジェクトのメソッド レベル)

欠点:

  • 不変オブジェクト (

    final 変更されたオブジェクト) を挿入できません。

  • ## 挿入されたオブジェクトは変更できます。
  • #set
このメソッドは通常の set メソッドであり、繰り返し呼び出すことができますが、リスクがあります。

Java でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?概要: 日々の開発では、属性インジェクションを使用して Bean の読み取りを簡素化することが、依然として主流の実装方法です。

@Resource Keyword

クラス インジェクションを実行するときは、@Autowired キーワードの使用に加えて、@Resource をインジェクションに使用することもできます。 @Resource との違い
同じ点: どちらも依存関係注入の実装に使用されます。

相違点:

異なる機能サポート: @Autowired プロパティ インジェクションをサポートします。 、セッター インジェクション、およびコンストラクター インジェクション。@Resource はプロパティ インジェクションとセッター インジェクションのみをサポートし、コンストラクター インジェクションはサポートしません。

    異なる起源: @Autowired は Spring フレームワークから来ています。リソースは JDK から取得されます。
  • #パラメータのサポートは異なります: @Resource はより多くのパラメータ設定をサポートしますが、@Autowired は必要なパラメータのみをサポートします。
  • Multiple同じタイプの @Bean エラー処理
  • 次の複数の Bean が表示され、同じオブジェクト タイプを返す場合、プログラムはエラーを報告します

ここで実行時間:
@Controller
public class StudentController {
    @Resource 
    private StudentService studentService;

    public void sayHi() {
        // 调用 service 方法
        studentService.sayHi();
    }
}
ログイン後にコピー

# 注# Bean オブジェクトが一意ではないため、エラーが報告されます。

同じタイプの複数の Bean のエラー処理Java でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?

同じタイプの複数の Bean の問題を解決するには、2 つの解決策があります。

@Resource(name="student1")

を定義します。

  • 名前に注釈を付けるには、

    @Qualifier を使用します。

# 使⽤ @Resource(name="student1") 定义.

@Controller
public class StudentController {
    
    @Resource(name = "student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}
ログイン後にコピー

# 使⽤ @Qualifier 注解定义名称.

@Controller
public class StudentController {
    
    @Resource
    @Qualifier("student2")
    private Student student;

    public void func() {
        System.out.println(student.toString());
    }
}
ログイン後にコピー

# 如果我们想用 @Autowired 可以写成:

@Autowired 
private Student student1;
// 存在有耦合性问题
ログイン後にコピー

以上がJava でオブジェクトを読み取り、保存する Spring の簡単な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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