Spring_IoC&DI

Spring_IoC&DI


1.春の概要

1.1春が(理解)するものです

そしてAOP(アスペクト指向プログラミング:指向プログラミング)カーネル:スプリングはIoCの(反転制御コントロールの逆)への完全なスタックのためのオープンソースアプリケーションフレームワークを軽量層状のJava SE / EEです。

SpringMVCは、プレゼンテーション層と永続化層春JDBCTemplateとビジネス層のトランザクション管理およびその他のエンタープライズ・アプリケーション・テクノロジーを提供するだけでなく、オープンソースの世界の統合多くのよく知られたサードパーティ製のフレームワークやライブラリ、Java EEのオープンソースフレームワークを使用して最大のエンタープライズアプリケーションとなっています

1.2春の開発(理解)

ロッド・ジョンソン(春の父)

2017年9月の春はSpring5.0ジェネリック版(GA)の最新版をリリース

1.3春の利点(理解)

便利なデカップリング、簡素化開発

AOPプログラミングのサポート

宣言型トランザクションのサポート

テストプログラムを容易にするために、

1.4春のアーキテクチャ(理解)

2.春のクイックスタート

2.1春のプログラム開発手順

①ベースにパケットがスプリング開発座標

②書き込みダオ・インタフェースと実装クラス

③春のコアプロファイルを作成します

④設定UserDaoImpl Spring構成ファイル内

⑤Beanインスタンスの春取得するAPIを使用します

座標2.2を導入して開発した春の基本パッケージ

<properties>
    <spring.version>5.0.5.RELEASE</spring.version>
</properties>
<!--导入spring的context坐标,context依赖core、beans、expression-->
<dependencies> 
    <dependency>  
        <groupId>org.springframework</groupId> 
        <artifactId>spring-context</artifactId> 
        <version>${spring.version}</version>
    </dependency>
</dependencies>

ダオ2.3インタフェースと実装クラスを書きます

public interface UserDao {  
    public void save();
}

public class UserDaoImpl implements UserDao {  
    @Override  
    public void save() {
         System.out.println("UserDao save method running....");
    }
}

春2.4コアプロファイルの作成

クラスパスにプロファイルを作成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">
</beans>

Spring構成ファイル内の設定2.5 UserDaoImpl

<?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="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>    
    //bean标签:在Spring的容器中 声明一个Bean对象
    //id属性:为bean类的唯一标识,不可重复
    //class属性:创建的bean全类名

</beans>

2.6は、API Beanインスタンスの春を用いて得られます

@Test
public void test1(){

        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");                  
        userDao.save();
 }

3. Spring構成ファイル

3.1ビーンの基本的な構成ラベル

春は作成に引き渡さオブジェクトを構成するために使用されます。

何も引数なしのコンストラクタを作成することはできませんが存在しない場合、デフォルトで、それは、パラメータなしでクラスのコンストラクタと呼ばれています。

基本的な属性:

ID:Beanインスタンスを一意Springコンテナを識別する

クラス:豆完全修飾名

3.2ビーンラベル範囲の設定

スコープは:対象者の範囲、次の値を参照します。

レンジ 説明
シングルトン デフォルトの単一の実施形態(共通)
プロトタイプ 多例的
リクエスト WEBプロジェクトは、春のBeanのオブジェクトを作成し、オブジェクトがドメインを要求するために入金されます
セッション WEBプロジェクトは、春のBeanのオブジェクトを作成し、オブジェクトがセッションドメインに入金されます
グローバルセッション WEBプロジェクト、ポートレット、ポートレット環境でのアプリケーション環境は同等のセッションglobalSessionはありませんので、もし

1)場合シングルトン範囲の値

ビーンのインスタンスの数:1

ビーンのインスタンス化のタイミング:春のコアファイルがロードされ、インスタンス化されたBeanインスタンスの設定

Beanのライフサイクル:

オブジェクトの作成:アプリケーションがロードされ、オブジェクトが作成されたコンテナを作成します

オブジェクトの実行:長いコンテナなどとして、オブジェクトが生きてきました

オブジェクト破壊:容器の破壊は、オブジェクトが破棄される場合、アプリケーションをアンインストール

2)値は、プロトタイプの範囲である場合

ビーンのインスタンス数:複数の

ビーンのインスタンス化のタイミングは:あなたがgetBeanを呼び出すと()メソッドは、Beanのインスタンス化

オブジェクトの作成:新しいオブジェクトのインスタンスを作成し、オブジェクトを使用して

オブジェクトの実行:限り、オブジェクトが使用されているように、生きてきました

オブジェクトが破棄される:オブジェクトは長い時間ではない場合、Javaのガベージコレクタが回収しました

3.3ビーンライフサイクル構成

INIT-方法:指定したクラスの初期化メソッドの名前

破壊法:指定破壊のクラスメソッドの名前

3.4ビーンは、次の3つの方法でインスタンス化

1)引数なしでコンストラクタを使用してインスタンス化

Beanは、引数なしのコンストラクタが失敗を作成されるデフォルトしない場合は、引数なしのデフォルトコンストラクタを持つクラスのオブジェクトを作成します。

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>

インスタンス化する2)staticファクトリメソッド
    ファクトリクラス(StaticFactoryBean)を作成するために、静的ファクトリクラスを返すオブジェクト(createUserDao)を含む方法
静的メソッド戻りBeanインスタンス工場

public class StaticFactoryBean {
    public static UserDao createUserDao(){    
    return new UserDaoImpl();
    }
}

applicationContext.xmlをプロファイルでは、静的なファクトリクラスの属性宣言クラスの完全なクラス名、および、静的なファクトリクラスのメソッド名属性値を工場出荷時にmethod属性を追加する
春が設定ファイルを読み込む際に、工場-method属性に基づいて、 、オブジェクトを返す静的メソッドを呼び出しUserDaoImpl

<bean id="userDao" class="com.itheima.factory.StaticFactoryBean" factory-method="createUserDao" />
    //等价于:UserDao userDao = StaticFactoryBean.createUserDao();

ファクトリインスタンス化する方法3)として
    ファクトリクラス(DynamicFactoryBean)を作成するために、ファクトリクラスオブジェクトのメソッドで非静的戻る(createUserDao)
非静的メソッドの戻りBeanインスタンス工場

public class DynamicFactoryBean {  
    public UserDao createUserDao(){        
        return new UserDaoImpl(); 
    }
}

    この方法は、非静的ファクトリクラスである場合は、それを直接呼び出すことはできません、あなたは、オブジェクトファクトリクラスを作成するために、Springコンテナを聞かせする必要があり、
その後、工場豆、工場出荷時にmethod属性によって復帰へ

<bean id="factoryBean" class="com.itheima.factory.DynamicFactoryBean"/>
    //等价于:factoryBean = new DynamicFactoryBean;
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
    //等价于:UserDao userDao = factoryBean.createUserDao();


3.5ビーン依存性注入エントリ

①作成UserServiceの、UserServiceの内部呼び出しUserDao save()メソッド

public class UserServiceImpl implements UserService {
    @Override
    public void save() {
         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");                     
         UserDao userDao = (UserDao) applicationContext.getBean("userDao"); 
         userDao.save();
    }
 }

②右利きUserServiceImpl春が作成されます

<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>

③得られたUserServiceのスプリングは、容器から操作しました

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.save();

依存性注入の3.6ビーンのコンセプト

依存性注入(依存性注入):それはスプリングフレームワークコアIOCにおいて具現化されます。

プログラミングする場合、制御の反転により、オブジェクトの作成は、春に引き渡されますが、コードが不可能な状況に依存しません。

IOCは解消彼らの依存度を減らすだけでなく、デカップリング。例えば:ビジネス層は、メソッドの永続化層を呼び出します。

春、春を使用した後、ビジネス層と永続化層は、維持できるようにすることをこの依存性。

簡単に言えば、それは取得する代わりに、私たち自身の、ビジネス層に入ってくるオブジェクトの永続化層のフレームワークを待つことです

3.7ビーンの依存性注入

①コンストラクタ

参照構成を作成しました

public class UserServiceImpl implements UserService {
@Override
public void save() {
ApplicationContext applicationContext = new 
                 ClassPathXmlApplicationContext("applicationContext.xml");       UserDao userDao = (UserDao) applicationContext.getBean("userDao");    
          userDao.save();
    }
 }

呼び出しで構成された注入Springコンテナの設定パラメータ

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">                <constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>

②set方法

UserServiceImplにsetUserDaoメソッドを追加します。

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;  
        } 
    @Override    
    public void save() {      
         userDao.save();
    }
}

Springコンテナの設定方法呼び出しセットインジェクション

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
    <property name="userDao" ref="userDao"/>
</bean>

メソッドの集合:P注入の名前空間

P名前空間は、本質的にセット注射注入方式であるが、次のように注入の前述の方法に比べて主に構成ファイルに設定するために便利です。

まず、我々はPの名前空間を導入する必要があります。

xmlns:p="http://www.springframework.org/schema/p"

第二に、必要性は、注入方法を変更します

<bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao-
 ref="userDao"/>

3.8ビーンの依存データ型の注入

以上の動作は、Beanが、参照オブジェクトが注入されてもよい参照、共通のデータタイプを注入され、そのため収集容器内に注入することができます。

データの注入された3つのデータタイプ

一般的なデータ型

参照データ型

コレクションのデータ型

前記参照データ型は、本明細書で繰り返すことはしません、UserDaoオブジェクトを注入する前の操作への参照である、注射の以下の方法は、一例として提示データと共通データ型の噴射タイプのセットを設定します。

ビーンデータ依存性注入タイプ

(1)共通データ型注射

public class UserDaoImpl implements UserDao {
private String company;
    private int age;
    public void setCompany(String company) {
        this.company = company;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void save() {
        System.out.println(company+"==="+age);
        System.out.println("UserDao save method running....");   
    }
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="company" value="传智播客"></property>
    <property name="age" value="15"></property>
</bean>

(2)集約データタイプ(リスト )インジェクション

public class UserDaoImpl implements UserDao {
    private List<String> strList;
    public void setStrList(List<String> strList) {
        this.strList = strList;
    }
    public void save() {
        System.out.println(strList);
        System.out.println("UserDao save method running....");
    }
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="strList">
        <list>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </list>
    </property>
</bean>

(3)データ収集の種類(一覧 )インジェクション

public class UserDaoImpl implements UserDao {
    private List<User> userList;
    public void setUserList(List<User> userList) {
    this.userList = userList;  
 }
public void save() {
    System.out.println(userList);
    System.out.println("UserDao save method running....");
    }
}
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="userList">
        <list>
            <bean class="com.itheima.domain.User"/>
            <bean class="com.itheima.domain.User"/>
            <ref bean="u1"/>
            <ref bean="u2"/>       
        </list>
    </property>
</bean>

(4)データ型のセット(地図<文字列、ユーザー>)注射

public class UserDaoImpl implements UserDao {
    private Map<String,User> userMap;
    public void setUserMap(Map<String, User> userMap) {
    this.userMap = userMap;
    }    
public void save() {      
    System.out.println(userMap);
    System.out.println("UserDao save method running....");
    }
}
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="userMap">
        <map>            
            <entry key="user1" value-ref="u1"/>
            <entry key="user2" value-ref="u2"/>
        </map>
    </property>
</bean>

(5)データ型のセット(特性)注射

public class UserDaoImpl implements UserDao {
    private Properties properties;
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    public void save() {
        System.out.println(properties);
        System.out.println("UserDao save method running....");
    }
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="properties">
        <props>
            <prop key="p1">aaa</prop>
            <prop key="p2">bbb</prop> 
            <prop key="p3">ccc</prop>
        </props>
    </property>
</bean>

他の設定ファイルの3.9導入(サブモジュールの開発)

非常に複雑で大規模なボリューム、設定の一部が他のプロファイルに分解することができるように、とSpring設定ファイルの主な輸入ラベルを使ってロードされたSpring構成につながる実際の開発、非常に春の構成内容、

<import resource="applicationContext-xxx.xml"/>

4.春の関連するAPI

4.1 ApplicationContextの継承システム

ApplicationContextの:インタフェースタイプは、アプリケーション・コンテキストを表し、オブジェクトは、実施例によりビーンSpringコンテナを得ることができます

4.2 ApplicationContextの実装クラス

1)ClassPathXmlApplicationContext

これは、ルートクラスからのコンフィギュレーション・ファイルをロードすることであることが推奨されます

2)FileSystemXmlApplicationContext

これは、コンフィギュレーション・ファイルがディスクで使用どこでもすることができ、ディスクパスからコンフィギュレーション・ファイルをロードすることです。

3)AnnotationConfigApplicationContext

注釈構成コンテナオブジェクトを使用するときは、春のコンテナを作成するには、このクラスを使用する必要があります。ノートを読み取るために使用されます。

4.3 getBean()メソッド

public Object getBean(String name) throws BeansException {  
    assertBeanFactoryActive();   
    return getBeanFactory().getBean(name);
}
public <T> T getBean(Class<T> requiredType) throws BeansException {                     assertBeanFactoryActive();
    return getBeanFactory().getBean(requiredType);
}

パラメータのデータ型が容器を表す文字列が例ビーンビーンのidに基づいて得られる、請求、返すはいオブジェクト、強く必要と回します。

データタイプパラメータは、容器は、同じタイプ豆、複数の容器の種類に応じてBeanインスタンスに一致するクラスタイプである場合、この方法は、説明します

getBean()メソッド

ApplicationContext applicationContext = new 
            ClassPathXmlApplicationContext("applicationContext.xml");
  UserService userService1 = (UserService) applicationContext.getBean("userService");
  UserService userService2 = applicationContext.getBean(UserService.class);

おすすめ

転載: www.cnblogs.com/lichusan/p/12181212.html