ホームページ Java &#&チュートリアル Spring IOCとDIの詳細説明

Spring IOCとDIの詳細説明

Jun 23, 2020 pm 05:59 PM
di ioc spring

Spring IOCとDIの詳細説明

Spring とは

Spring は、IoC と AOP を核としたフレームワークです。

IoC (Inversion of Control、制御の反転) は Spring の基盤です。

IoC は、オブジェクトを作成するときに、前のプログラマがオブジェクトの作成を Spring に任せるのではなく、新しいコンストラクター メソッドを呼び出したことを単に意味します。

DI (Dependency Inject、依存性注入) は、これら 2 つの名前が 2 つの観点から同じ概念を説明していることを除いて、IoC と同じ意味を持ちます。

簡単に言えば、DI はオブジェクトの属性であり、関連する値が注入されており、直接使用できます。

Spring IOCとDIの詳細説明

IoC による制御の反転

各オブジェクト クラスをカプセル化した後、IoC コンテナを介してこれらのオブジェクト クラスを関連付けます。このように、オブジェクトは IoC コンテナを介して接続され、オブジェクト間には直接的な接続はありません。
Spring IOCとDIの詳細説明

アプリケーションが 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Feb 01, 2024 pm 09:18 PM

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

Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Apr 28, 2024 am 11:46 AM

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

Springプログラマティックトランザクションの実装方法は何ですか? Springプログラマティックトランザクションの実装方法は何ですか? Jan 08, 2024 am 10:23 AM

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

Spring Boot と Spring Cloud の違いと関係 Spring Boot と Spring Cloud の違いと関係 Jun 22, 2023 pm 06:25 PM

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

史上最も強力な組織 Spring で最もよく使用される 7 つのアノテーション! 史上最も強力な組織 Spring で最もよく使用される 7 つのアノテーション! Jul 26, 2023 pm 04:38 PM

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

Spring でトランザクション分離レベルを設定する方法 Spring でトランザクション分離レベルを設定する方法 Jan 26, 2024 pm 05:38 PM

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

Java言語でのIoCとAOPのアプリケーション Java言語でのIoCとAOPのアプリケーション Jun 10, 2023 pm 12:10 PM

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

Spring Cloud をゼロから学ぶ Spring Cloud をゼロから学ぶ Jun 22, 2023 am 08:11 AM

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

See all articles