Spring IoC解説

5315 ワード

皆さん、こんにちは、私は鉄を挙げるのが好きなプログラマーのShrです.
 
本論文ではSpringフレームワークが制御反転(Inversion of Control)を実現する概念を紹介します.この文章を読むには6分ぐらいかかります.
 
IoCの中で一番基本的なのは反射です.反射を知らない読者がいたら、前に書いた文章を参考にしてください.
 
IoCは工場モードを使用しています.
 
まずいくつかの概念について話します.
 
一、制御反転
まずコードを見てください.
 
public class StudentServiceImpl {
    private StudentDao studentDao = new StudentDaoImpl();

    /**
     *       
     * @return
     */
    public List getStudentList(){
        List studentList = studentDao.getStudentList();
        return studentList;
    }
}
 
StudentDaoImplはプログラムで作成され、制御反転はオブジェクトの作成とメンテナンスをコンテナに任せて管理します.
 
二、依存注入
構造方法に基づいて注入し、上のコードを以下のように変更することができます.
 
public class StudentService {
    private StudentDao studentDao;

    //       
    public StudentService(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    /**
     *       
     * @return
     */
    public List getStudentList(){
        List studentList = studentDao.getStudentList();
        return studentList;
    }
}
 
Setter法に基づいて注入すると、このように変更できます.
 
public class StudentService {
    private StudentDao studentDao;

    // Setter    
    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    /**
     *       
     * @return
     */
    public List getStudentList(){
        List studentList = studentDao.getStudentList();
        return studentList;
    }
}
 
コンテナは、オブジェクトを作成する際に、依存するオブジェクトの値を注入します.
 
三、容器
インターフェースorg.springframe ewark.beans.factory.BenFactoryはBean容器と呼ばれています.
 
インターフェースorg.springframe ework.co.textはアプリケーションコンテキストと呼ばれ、BeanFactoryのサブインターフェースです.
 
コンテナは、設定メタデータを読み込むことにより、実装、構成、組立オブジェクトに関する命令を取得します.設定メタデータはXML、JavaコメントまたはJavaコードで表されます.
 
Apple Comptextは複数の実現類があります.
Class PathXml Apple Conteet ,クラスパスのリソースを読みだします.
FileSystemXmlAppliationContectは、ハードディスクの指定されたパスのファイルリソースを読みだします.
Xml WebApplication Contectは、Webアプリケーションのリソースを読みだします.
 
3.1 XMLベースのコンテナのメタデータを設定します.
通常Springのコアプロファイルをappication Contact.xmlといい、他のファイル名ともいいます.
 
ファイル形式は以下の通りです.
 


    
    

    
        
    

    

 
id属性は単一のbeanで定義された文字列を識別するために使用されます.クラスの属性はクラスのフルネームです.
 
テストクラスを作成:
 
public class StudentTest {
    @Test
    public void test01() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentDao studentDao = (StudentDao) applicationContext.getBean("studentDao");
        List studentList = studentDao.getStudentList();
        System.out.println(studentList);
        //    [Student [id=1, name=  , age=20, gender=1], Student [id=3, name=33, age=333, gender=3333]]
    }
}
 
FileSystemXmlAppliation ContectとXml WebAppliation Contectの読者は自分でテストできます.
 
3.2 注解による注入
まず、appication Contect.xmlにcontext名前空間を導入する必要があります.
 
appication Contect.xmlにcontext:component-scanラベルを追加します.例えば:
 

    

    
    

 
 
いくつかのよく使われている注釈には@Repository、@Service、@Controllerがあります.それぞれデータアクセス層、ビジネス層、コントロール層、そして@Componentがあります.
 
3.3 Benの役割領域
beanラベルのscope属性によって、beanの役割領域を設定します.デフォルトはsingletonで、単例(餓漢式)で、beanラベルのlazy-nit="true"を指定して、怠け者風に設定します.
 
また、scope属性はprototype、request、session、session、global Session、aplication、websocketがあります.
 
プロトタイプに設定します.取得するたびに新しく作成されたオブジェクトです.
 
その他の属性値の意味は公式文書で確認できます.
https://docs.spring.io/spring/docs/4.3.17.RELEASE/spring-framework-reference/htmlsingle/#beans-factory-scopes
 
もっと多いBeanについての紹介は参考にしてください.https://docs.spring.io/spring/docs/4.3.17.RELEASE/spring-framework-reference/htmlsingle/#beans-definition
の表7.1です
 
締め括りをつける
長い間文章を書いていないので、ちょっと慣れないです.知識の点によっては書かれていないかもしれません.
 
Springを使う時Spring配置ファイルの名前空間は全部コピーされています.どういう意味か分かりません.今日はこの文章はcontext名前空間とaop、txなどの名前空間だけを話しました.後の文章で紹介します.
 
もう遅いので、寝ます.