Bean オブジェクトの取得はオブジェクト アセンブリとも呼ばれます。これは、オブジェクトを取り出して保存することを意味します。どこかに置く クラスではオブジェクトインジェクションと呼ばれることもあります。
オブジェクト アセンブリ (オブジェクト インジェクション) を実装するには、次の 3 つの方法があります。
属性インジェクション
構築メソッドインジェクション
セッター インジェクション
最初に次のパッケージとクラスを作成します。
属性注入属性注入は
@Autowired を使用して実装され、Service クラスは
Controller
@Controller public class StudentController { // 1.使用属性注入的方式获取 Bean @Autowired private StudentService studentService; public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
欠点:
機能上の問題:不変 (
final
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
を追加する必要があります。エラーが報告されます。
利点:
不変オブジェクトを挿入できます。
挿入されたオブジェクトは変更されません。
追加されました 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 変更されたオブジェクト) を挿入できません。
概要: 日々の開発では、属性インジェクションを使用して Bean の読み取りを簡素化することが、依然として主流の実装方法です。
@Resource Keyword
同じ点: どちらも依存関係注入の実装に使用されます。相違点:
異なる機能サポート: @Autowired プロパティ インジェクションをサポートします。 、セッター インジェクション、およびコンストラクター インジェクション。@Resource はプロパティ インジェクションとセッター インジェクションのみをサポートし、コンストラクター インジェクションはサポートしません。
@Controller public class StudentController { @Resource private StudentService studentService; public void sayHi() { // 调用 service 方法 studentService.sayHi(); } }
# 注# Bean オブジェクトが一意ではないため、エラーが報告されます。
同じタイプの複数の Bean のエラー処理
同じタイプの複数の 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 サイトの他の関連記事を参照してください。