Spring Framework ----->(1)制御の反転のSpringコンセプトとIoCコアテクノロジーの詳細な分析

1つは、Springフレームワークとは何ですか

1.春の概要:

これは、プロジェクトモジュール間の管理、クラスとクラス間の管理を容易にし、開発者がオブジェクトを作成し、オブジェクト間の関係を管理できるようにすることです。

2. Springコアテクノロジー:
(1)制御の反転(IoC)

IoC:モジュールとクラス間のデカップリングを実現できます。つまり、自分で使用するオブジェクトを作成する必要はありません。代わりに、自動的に「注入」するSpringコンテナによって管理され、注入は割り当てを意味します。

(2)アスペクト指向プログラミング(AOP)

AOP:システムレベルのサービスの再利用を最大化することで、プログラマーはシステムレベルのサービスをメインのビジネスロジックに手動で「ミックス」する必要がなくなり、代わりにSpringコンテナーが「ウィービング」を完了します。

3.利点:
  • 1.軽量
  • 2.インターフェースプログラミングのためのデカップリング
  • 3.AOPプログラミングのサポート

2、IoC制御の反転

1. IoC(制御の反転):制御の反転は、理論、概念、およびアイデアです。

(1)制御の反転:オブジェクトの作成、属性の割り当て、および依存関係の管理はすべて、コード外のコンテナーによって実装されます。つまり、オブジェクトの作成は他の外部リソースによって完了されます。

(2)制御:オブジェクトの作成、オブジェクトの属性割り当て、およびオブジェクト間の関係管理。

(3)取り消し:元の開発者管理およびオブジェクト作成権限をコード外のコンテナーに転送します。コンテナは、開発者ではなくオブジェクトを管理します。オブジェクトを作成し、属性に値を割り当てます。

(4)順回転:開発者は新しい構築方法を使用してコード内にオブジェクトを作成し、開発者はオブジェクトを積極的に管理します。

public static void main(String args[ ]){
    
    
     Student student = new Student( ); // 在代码中, 创建对象。
}

(5)コンテナ:サーバーソフトウェア、フレームワーク(春)です

2.Javaでオブジェクトを作成する方法は何ですか。
  • 1.工法、新規対象
  • 2.リフレクション
  • 3.シリアル化
  • 4.クローン
  • 5. ioc:コンテナ作成オブジェクト
  • 6.動的プロキシ

ここでは、サーブレットなど、以前にiocの概念も学びました。1。HttpServelt
を継承するクラスを作成します。2。web.xmlに
サーブレットを登録して使用します。3
< servlet-name> myservlet < /servlet-name>
< servelt-class>com.hcz.controller.MyServlet< /servlet-class >
ここで作成されたサーブレットオブジェクトはありません。 no MyServlet myservlet = new MyServlet()
4。このサーブレットオブジェクトはTomcatサーバーによって作成されます。Tomcatはコンテナ
5とも呼ばれます。コンテナとしてのTomcat:サーブレットオブジェクト、リスナー、およびフィルタオブジェクトは内部に格納されます。

3.なぜIoCを使用するのですか?

目的は、コードへの変更を減らし、さまざまな機能を実現することです。デカップリングを実現します。

4.IoCの実装
  • DI(依存性注入)依存性注入:

支援のために別のオブジェクトを呼び出す必要がある場合は、コードで呼び出し先を作成する必要はありません。プログラムで使用するオブジェクトの名前を指定するだけです。オブジェクトがコンテナ内でどのように作成されるかについては、割り当て、および検索はすべてコンテナ内で実装されます。コンテナからプログラムに渡されます。

  • Springフレームワークは、依存性注入を使用してIoCを実装します。

1. Springは、オブジェクトを管理し、プロパティに値を割り当てるコンテナです。最下層は、オブジェクトを作成するためのリフレクションです
。2。Springコンテナは、すべてのJavaオブジェクトの作成と管理を担当するスーパーファクトリです。これらのJavaオブジェクトはBeanと呼ばれます。
3. Springコンテナの管理コンテナ内のBean間の依存関係に関して、Springは「依存性注入」を使用してBean間の依存関係を管理します。

3つ目は、最初のSpringプログラムを作成する

(1)最初にMavenプロジェクトを作成します

ここに画像の説明を挿入します

(2)Maven依存関係pom.xmlを導入します
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>
(3)インターフェースとエンティティークラスを定義する
public interface SomeService {
    
    
    public void doSome();
}
public class SomeServiceImpl implements SomeService {
    
    
    public SomeServiceImpl(){
    
    
        System.out.println("无参构造方法");
    }
    @Override
    public void doSome() {
    
    
        System.out.println("执行了SomeService的doSome方法");
    }
}
(4)Spring構成ファイルを作成します
次に、src / main / resources /ディレクトリにxmlファイルを作成します。ファイル名は任意ですが、Springでは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.xsd">

    <bean id="someService" class="com.hcz.service.impl.SomeServiceImpl"/>
    <bean id="someService1" class="com.hcz.service.impl.SomeServiceImpl"/>

    <!--创建一个非定义类的对象-->
    <bean id="myDate" class="java.util.Date"/>
</beans>

分析
1。<bean>:インスタンスオブジェクトの作成に使用されます。インスタンスオブジェクトはBeanタグに対応します
。2。id属性:オブジェクトのカスタム名。一意の値です。SpringはこのID値からインスタンスオブジェクトを検索します。
3.クラス属性:クラスの完全修飾名(注:Springはオブジェクトを作成するためのリフレクションメカニズムであるため、インターフェイスにすることはできません。クラスを使用する必要があります)

Springの基本的な実装原則
SomeService someService = new SomeServiceImpl();
Springは、作成されたオブジェクトをマップに配置します。Springフレームワークには、オブジェクトを格納するためのマップ、springMap.put(id value、object)があります。
例:
springMap.put("someService",new SomeSerivceImp());

(5)テストクラスを定義します
/**
 * 1、不使用spring容器创建对象
 */
@Test
public void testSomeServiceOne(){
    
    
    SomeService service = new SomeServiceImpl();
    service.doSome();
}

/**
 * 2、使用spring容器创建对象
 */
@Test
public void testSomeServiceTwo(){
    
    
    
    //1.指定spring的配置文件
    String config = "bean.xml";
    //2.创建spring容器的【所有对象】,因为调用了它们各自的无参构造方法
    ApplicationContext context = new ClassPathXmlApplicationContext(config);
    //3.从容器中获取某个对象
    SomeService someService = (SomeService) context.getBean("someService");
    someService.doSome();
}

分析1。ApplicationContext
IOCコンテナのエントリポイントを表します。コンテナオブジェクトが初期化されると、その中のすべてのオブジェクトが一度にアセンブルされます。将来、これらのオブジェクトをコードで使用する場合は、メモリから直接取得するだけで済みます。実行効率が高くなります。しかし、それはメモリを消費します。
このクラスには、構成ファイルを読み取るための2つの実装クラスがあります。

  • ClassPathXmlApplicationContext:クラスパスからデータを読み取ることを意味します>
  • FileSystemXmlApplicationContext:現在のファイルシステムからデータを読み取ることを意味します

2.
コンテナ内のインスタンスオブジェクトはいつ作成されましたか?コンテナ内のオブジェクトは、スプリングコンテナの作成時にすでに作成されています。

3.Springコンテナを使用してオブジェクトを作成する概略図
ここに画像の説明を挿入します

4.スプリングコンテナは、オブジェクトを取得する方法を定義するだけでなく、スプリングコンテナ内のインスタンスオブジェクトの数とそれぞれのオブジェクト名も定義します。

//3.从容器中获取容器中定义的对象的数量
int num = context.getBeanDefinitionCount();

//4.获取容器中每个定义的对象的名称
String[] names = context.getBeanDefinitionNames();

5.スプリングコンテナは、Dateなどのカスタマイズされていないクラスを取得することもできます。

構成ファイルで定義

<bean id="myDate" class="java.util.Date"/>

テスト方法を定義する

@Test
public void testSomeServiceFour(){
    
    
    //1.指定spring的配置文件
    String config = "bean.xml";
    //2.创建spring容器中的所有对象
    ApplicationContext context = new ClassPathXmlApplicationContext(config);
    //3.从容器中获取某个对象
    Date myDate = (Date) context.getBean("myDate");
    System.out.println(myDate);
}

何か欠点があれば、訂正してください!

おすすめ

転載: blog.csdn.net/hcz666/article/details/113190638