Spring IOCとDIの詳細説明
Spring とは
Spring は、IoC と AOP を核としたフレームワークです。
IoC (Inversion of Control、制御の反転) は Spring の基盤です。
IoC は、オブジェクトを作成するときに、前のプログラマがオブジェクトの作成を Spring に任せるのではなく、新しいコンストラクター メソッドを呼び出したことを単に意味します。
DI (Dependency Inject、依存性注入) は、これら 2 つの名前が 2 つの観点から同じ概念を説明していることを除いて、IoC と同じ意味を持ちます。
簡単に言えば、DI はオブジェクトの属性であり、関連する値が注入されており、直接使用できます。
IoC による制御の反転
各オブジェクト クラスをカプセル化した後、IoC コンテナを介してこれらのオブジェクト クラスを関連付けます。このように、オブジェクトは IoC コンテナを介して接続され、オブジェクト間には直接的な接続はありません。
アプリケーションが IoC コンテナを導入する前に、オブジェクト A はオブジェクト B に依存します。その後、オブジェクト A がインスタンス化されるか、特定の時点まで実行されると、オブジェクト B をアクティブに作成するか、それを使用する必要があります。作成されたオブジェクト B は、作成されたオブジェクト B を作成するか使用するかにかかわらず、制御はアプリケーション自体にあります。
アプリケーションが Ioc コンテナを導入すると、オブジェクト A とオブジェクト B の間の直接接続が失われます。したがって、オブジェクト A がインスタンス化されて実行されるときに、オブジェクト B が必要な場合、IoC コンテナはオブジェクト B をアクティブに作成し、オブジェクト A が必要とする場所にそれを挿入します (つまり、依存関係の注入)。その結果、オブジェクト A がオブジェクト B に依存するプロセスは、能動的な動作から受動的な動作、つまり、オブジェクトの作成が IoC コンテナに渡されて処理され、制御権が逆転します。いわゆる制御の反転。
DI 依存関係の注入
IoC コンテナーは、実行時に特定の依存関係をオブジェクトに動的に注入します。たとえば、オブジェクト B をオブジェクト A のメンバー変数に注入 (代入) します。
実は、Dependency Injection (DI) と Inversion of Control (IoC) は同じものを別の記述で表現したもので、ある側面においては異なる視点から記述したものです。依存関係の注入はアプリケーションの観点から説明されます。つまり、アプリケーションは必要な外部リソースの作成と注入をコンテナに依存しますが、制御の反転はコンテナの観点から説明されます。つまり、コンテナがリソースを制御します。コンテナはアプリケーションの方向を反転し、アプリケーションが必要とする外部リソースを注入します。ここで言及する外部リソースには、外部インスタンス オブジェクト、外部ファイル オブジェクトなどが含まれます。
IoC および DI の実装
(1) プロパティ セッター メソッドの注入: セッター メソッドを使用して依存インスタンスを注入する IoC コンテナーを指します。パラメータなしのコンストラクタまたはパラメータなしの静的ファクトリメソッドを呼び出してBeanをインスタンス化し、Beanのsetterメソッドを呼び出すことで、setterメソッドによる依存性注入を実装できます。この方法はシンプルで直感的で理解しやすいため、Spring の設定インジェクションが広く使用されています。
package com.ssm.entry; public class UserServiceImpl implements UserService { private UserDao userDao; // setter()实现依赖注入 public void setUserDao(UserDao userDao){ this.userDao = userDao; } public void login() { this.userDao.login(); System.out.println("UserService login"); } }
(2) コンストラクター注入: コンストラクター メソッドを使用して依存インスタンスを注入する IoC コンテナーを指します。コンストラクターに基づく依存関係の注入は、パラメーターを指定してコンストラクターを呼び出すことによって実装されます。各パラメーターは依存関係を表します。
applicationContext.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 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> <!-- 将指定类配置给Spring,让Spring创建其对象的实例 控制反转 --> <bean id="UserDao" class="com.ssm.entry.UserDaoImpl"></bean> <!-- 添加一个id为userService的Bean 依赖注入--> <bean id="UserService" class="com.ssm.entry.UserServiceImpl"> <!-- 将name为UserDao的Bean注入UserService实例中 --> <property name="UserDao" ref="UserDao"/> </bean> </beans>
IoC テスト
package com.ssm.entry; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class IoC { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao)applicationContext.getBean("UserDao"); userDao.login(); } }
DI テスト
package com.ssm.entry; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class DI { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService)applicationContext.getBean("UserService"); userService.login(); } }
推奨チュートリアル: 「Java チュートリアル #」
#
以上がSpring IOCとDIの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









2023年、AI技術が注目を集め、プログラミング分野を中心にさまざまな業界に大きな影響を与えています。 AI テクノロジーの重要性に対する人々の認識はますます高まっており、Spring コミュニティも例外ではありません。 GenAI (汎用人工知能) テクノロジーの継続的な進歩に伴い、AI 機能を備えたアプリケーションの作成を簡素化することが重要かつ緊急になっています。このような背景から、AI 機能アプリケーションの開発プロセスを簡素化し、シンプルかつ直観的にし、不必要な複雑さを回避することを目的とした「SpringAI」が登場しました。 「SpringAI」により、開発者はAI機能を搭載したアプリケーションをより簡単に構築でき、使いやすく、操作しやすくなります。

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

Spring プログラムによるトランザクションを実装する方法: 1. TransactionTemplate を使用する; 2. TransactionCallback および TransactionCallbackWithoutResult を使用する; 3. Transactional アノテーションを使用する; 4. TransactionTemplate を @Transactional と組み合わせて使用する; 5. トランザクション マネージャーをカスタマイズする。

SpringBoot と SpringCloud は両方とも、開発者がマイクロサービス アプリケーションをより迅速に構築およびデプロイできるようにする Spring Framework の拡張機能ですが、それぞれ異なる目的と機能を持っています。 SpringBoot は、Java アプリケーションを迅速に構築するためのフレームワークであり、開発者は Spring ベースのアプリケーションをより迅速に作成してデプロイできるようになります。スタンドアロンの実行可能な Spring アプリケーションを構築するための、シンプルでわかりやすい方法を提供します。

テクノロジーの更新と反復により、Java5.0 はアノテーションをサポートし始めました。 Java の主要なフレームワークである Spring は、バージョン 2.5 に更新されて以来、徐々に XML 構成を放棄し始めており、Spring フレームワークを制御するために使用されるアノテーションが増えています。

Spring でトランザクション分離レベルを設定する方法: 1. @Transactional アノテーションを使用します; 2. Spring 構成ファイルに設定します; 3. PlatformTransactionManager を使用します; 4. Java 構成クラスに設定します。詳細な導入方法: 1. @Transactional アノテーションを使用し、トランザクション管理が必要なクラスまたはメソッドに @Transactional アノテーションを追加し、属性に分離レベルを設定します。 2. Spring の設定ファイルなどで

Java 言語では、IoC (制御の反転) と AOP (アスペクト指向プログラミング) の 2 つの非常に重要なプログラミングのアイデアとテクノロジです。これらのアプリケーションにより、コードの保守性、拡張性、再利用性が大幅に向上し、開発者がソフトウェア システムをより効率的に開発および保守できるようになります。 IoC はオブジェクト指向の設計パターンであり、「依存性注入」とも呼ばれます。

Java 開発者として、Spring フレームワークを学習して使用することは必須のスキルです。クラウド コンピューティングとマイクロサービスの人気に伴い、Spring Cloud の学習と使用も習得しなければならないスキルになりました。 SpringCloud は、分散システムを迅速に構築するための SpringBoot に基づく開発ツールセットです。サービスの登録と検出、構成センター、負荷分散、サーキット ブレーカーなどの一連のコンポーネントを開発者に提供し、開発者がマイクロ サービスを構築できるようにします。
