Springフレームワークのコア技術

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_43378945/article/details/102657414

概要春の
 春は、層状のJava SE / EEアプリケーションが軽量なオープンソースのフレームワークを停止しています。春はIOCとAOPの中核です。
春の主な利点は次のとおりです。

  1. ばねによって提供さ簡単に、開発を簡素化、IoCコンテナをデカップリング、我々は、オブジェクト間の関係に依存することができ、ハードコーディングされた結果を回避するためにスプリング制御、高いカップリング手順をいいます。
  2. AOPプログラミングのサポート、春、便利指向プログラミングによって提供さAOP機能。
  3. 宣言型トランザクションのサポートは、春には、我々は、宣言的な方法の柔軟性によってトランザクションを管理、開発効率と品質を向上させるために、トランザクション管理コードの単調な退屈から解放することができます。
  4. 便利な試験手順は、非プログラミング依存的で、ほとんどすべての試験容器を行うことができます。
  5. 優れたフレームワークの様々な容易な統合、春は優れたフレームワークのさまざまな直接的なサポートを提供します。
    ばねアーキテクチャ
    それぞれの機能に応じてバネフレーム全体は、5つの主要モジュール、5つのモジュールに分割することが可能であり、すべての適切な支持体と永続化層、ビジネス層からプレゼンテーション層に、エンタープライズ・アプリケーションに必要なほとんどすべてを提供春が理由とストップフレームです。
    ここに画像を挿入説明
    1.コアモジュール(コアコンテナ)
    スプリングコアモジュールは、クラス間のIOCの関数依存性を実装した構成として説明依存関係からコードからそれを外れます。クラス、経営、買収などを担当するIOCによってコンテナを作成します。BeanFctoryインターフェースは、コア血管機能の多くを達成するために、コアSpringフレームワークへのインタフェースです。
    コンテキストモジュールは、コアモジュール上に構築されたBeanFactoryの機能を拡張します。ApplicationContextのインタフェースコンテキストはコアモジュールです。
    式言語(式言語)ようにセットをサポートし、オブジェクトのプロパティを取得、オブジェクトのメソッドは、配列を操作呼び出して、コレクションとする統一された式言語(EL)の拡張です。簡単に表現し、春IOCコンテナを介して相互作用するために使用します。
    2.AOPモジュール
    スプリングAOPモジュールはまた、フレームワークAOP AspectJの言語レベルを内蔵AOPアライアンスの仕様を満たすが提供されます。AOPは、カップリングによって低減することができます。
    Accessデータ統合モジュール(データアクセス/統合)
    モジュールは、JDBC、ORM、OXM、JMSおよびトランザクション管理含まれています:
    1.トランザクションモジュール:このモジュールは春の管理を、限り、それは得ることができるよう春の春は、オブジェクト管理サービスを管理します利点は、トランザクション制御を必要とせず、それはトランザクション管理と宣言型プログラミングコードをサポートしています。
    2.JDBCモジュール:これらのテンプレートを使用し、JBDCのサンプルテンプレートを提供し、伝統的な退屈なJDBCコーディングだけでなく、トランザクション制御をしなければならない、との取引を管理する春のメリットを享受することができます排除します。
    3.ORMモジュールは: - MyBatisのが好き休止、JPA、などのシームレスな統合「オブジェクト関係」マッピングフレームワーク、人気を提供します。そして、あなたは追加の制御トランザクションなしで、春のトランザクション管理を使用することができます。
    4.OXMモジュールは:JAXB、ヒマシ、XMLBeansのとXStreamのを含むマップされたJavaオブジェクト、オブジェクト/ XMLマッピング実装にXMLマッピングデータ、またはXMLデータにオブジェクト/ XML、Javaオブジェクトを達成するためにマッピングを提供します。
    5.JMSモジュール:JMS(Javaのメッセージングサービス)のための、より簡単な使用JMSは、「メッセージプロデューサ、メッセージコンシューマ」テンプレートを提供し、JMSは、二つのアプリケーション、または分散システムの間で使用されていますメッセージ、非同期通信を送ります。
    Webモジュールは、
      モジュールは、そのようなので、上のファイルのアップロード、FreeMarkerのとなどのWebアプリケーションの機能を提供ApplicationContextのモジュールの上に構築されています。このようStruts2のように、スプリングMVCフレームワークを統合することができます。また、春には、独自のMVCフレームワークのSpring MVCを提供します。
      テストモジュールの
      スプリングは、非プログラミング依存的とほぼすべての試験容器であること、およびTestNGのJUnitテストフレームワークをサポートすることができます。
      知人IOCとDI
      1は、制御と依存性注入のDIのIoC反転
      方式従来のプログラミング、私たちは、あなたが、今回我々は積極的に行動している新しいことでオブジェクトを作成する必要があるオブジェクトを使用する必要があります。そして私たちは、IoCの意志依存オブジェクトを作成し、注入を支援するために、コンテナによって、IoCコンテナにオブジェクトコントロールを作成し、私たちのプログラムは、受動的にその制御の反転と呼ばれるオブジェクト、制御反転を、作成するためにIoCコンテナを受け入れます。

第三者は、我々が使用する必要があるクラスとクラス間の依存関係を削除するために、注射を達成することを可能にする概念:ストレートポイントにIoCのは本当に十分ではないので、DI(依存性注入依存性の注入)を提案しています。全体的に、**のIoCがゴールで、DIは手段であり、**多くの場合、オブジェクトの依存性注入を作成するプロセスを意味しています。オブジェクトは仕方によって生成されるように、あなたは関連オブジェクトを作成する必要がある場合に、逆さまに、伝統的な方法(新)を、当社のIoCを達成するためにIoCコンテナ注入(DI)で私たちを助けます。

簡単に言えば、私たちはクラスの別のクラスを必要とするもの、ちょうど私たちは春の作成を支援しましょう、これは制御の反転と呼ばれ、その後、春には依存性注入と呼ばれる私たちのクラスに必要なオブジェクトを設定するために私たちを助けます。
  2.いくつかの一般的な注入方法
  注入法を用いて、設定パラメータを有します

public class  User{
    private String name;
    public User(String name){
        this.name=name;
    }
} 

    User user=new User("tom");

プロパティインジェクションを使用

public class  User{
    private String name;
    public void setName(String name){
        this.name=name;
    }
}

     User user=new User();
     user.setName("jack");

インタフェース注射を使用

// 将调用类所有依赖注入的方法抽取到接口中,调用类通过实现该接口提供相应的注入方法。 

public interface Dao{
    public void delete(String name);
} 

public class DapIml implements Dao{
    private String name;
    public void delete(String name){
        this.name=name;
    }
}

コンテナは、依存関係を注入することによって完成されます

あれば、我々は移植の手動注入方法を必要とするすべての上に、私たちに完全なクラスのインスタンス化を支援するためにサードパーティ製の容器、およびアセンブリの依存関係は、我々は唯一のビジネスロジックに集中する必要が開発することができます。ばねは、容器、クラスとクラス記述又はアノテーションの間を介して設定ファイルの依存関係、クラス初期化及びオートコンプリート依存性注入作業です。
IOC 3.Spring例
(1)プロジェクトを作成するには、jarファイルのパッケージをインポートします

ここでは、ただこれだけように、瓶、豆、コア、コンテキストにコアモジュールをインポートする必要が発現と、IoCの操作を行います。関連のjarパッケージスプリングなしログので、私たちはまた、log4jのとコモンズ・ログをインポートする必要があります。

(2)クラスを作成します

 public class User {
    public void add(){
        System.out.println("add.....");
    }
}

(3)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="user" class="com.cad.domain.User"/>        
</beans>  

(4)試験

 //这只是用来测试的代码,后期不会这么写
public class Test {

    @org.junit.Test
    public void test(){
        //加载配置文件
        ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
        //获取对象
        User user=(User) context.getBean("user");
        System.out.println(user);
        //调用方法
        user.add();
    }
} 

容器は、プロファイルに基づいて、春記述情報を開始し、自動的にBeanの依存関係のアセンブリを完成インスタンス化するとき、コンテナBeanインスタンスから得ることができ、それは直接使用することができます。一人で簡単な設定ファイルを行う春はなぜ、あなたはそれを使用する魔法の豆の良いプログラムをインスタンス化し、設定することができますか?答えは、Javaリフレクション技術によってです。

DI 4.Spring例
 当社のサービス層は常に、DAO層を使用している、我々はDAOのサービス層で、常に新しいオブジェクトを使用し、そして今、私たちは、DAO層サービス層を注入する依存性注入の方法を使用します。

// UserDao
public class UserDao {
    public void add(){
        System.out.println("dao.....");
    }
}

// UserService
public class UserService {
    UserDao userdao;
    public void setUserdao(UserDao userdao){
        this.userdao=userdao;
    }

    public void add(){
        System.out.println("service.......");
        userdao.add();
    }
}

-------------------------------分割线--------------------------

// 配置文件
<bean id="userdao" class="com.cad.domain.UserDao"></bean> 
//这样在实例化service的时候,同时装配了dao对象,实现了依赖注入
<bean id="userservice" class="com.cad.domain.UserService">
    //ref为dao的id值
    <property name="userdao" ref="userdao"></property>
</bean>

SpringのIoCコンテナは、詳細な
1.BeanFactory
  たBeanFactoryは、クラスファクトリの従来の構成は、少数のクラスインスタンスまたはクラスを担当して、伝統的なクラスファクトリは異なる、ファクトリクラスです;たBeanFactoryは、オブジェクトのさまざまな種類を作成して管理することができ、春これらは、BeanにJavaオブジェクトを作成および管理するために呼び出されています。

たBeanFactoryはインターフェースである、春は、最も一般的にはXmlBeanFactoryある、たBeanFactoryの実装のさまざまを提供します。これは、最も重要なたBeanFactoryはビーンがコンテナから名前を指定返すインタフェースメソッドgetBean(文字列のbeanName)、です。さらに、たBeanFactoryインタフェース機能を拡張することができる(例えば、ApplicationContextの)そのインターフェースによって実装します。次の例を参照してください。

//我们使用Spring配置文件为User类提供配置信息,然后通过BeanFactory装载配置文件,启动Spring IoC容器。 
<?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="user" class="com.cad.domain.User"></bean>   
</beans>  
// 我们通过XmlBeanFactory实现类启动Spring IoC容器 
public class Test {
    @org.junit.Test
    public void test(){ 
        //获取配置文件
        ResourcePatternResolver  resolver=new PathMatchingResourcePatternResolver(); 
        Resource rs=resolver.getResource("classpath:bean.xml");

        //加载配置文件并启动IoC容器
        BeanFactory bf=new XmlBeanFactory(rs);

        //从容器中获取Bean对象
        User user=(User) bf.getBean("user");

        user.speak();
    }
}  

XmlBeanFactoryの設定ファイルとたBeanFactoryを通じてIoCコンテナを起動し、春のIoCコンテナのロードを開始し、ときに最初のコールの初期化アクションを作成し、設定ファイルで定義されたBeanの初期化されません。初期設定たBeanFactoryでは、我々はLog4Jのを使用して、ロギングフレームワークを提供しなければなりません。
2.ApplicationContext
  たBeanFactoryに由来のApplicationContextは実用化のために多くの機能を提供します。ApplicationContextのは、コンフィギュレーションの方法によって達成することができる一方でたBeanFactoryでは、多くの機能は、達成するためのプログラミングを必要としています。メインクラスはApplicationContextのClassPathXmlApplicationContextとFileSystemXmlApplicationContextに実装され、前者のプロファイルがデフォルトの設定であるデフォルトクラスパスからロードされ、次のように、ファイルシステムからロードされます。

// 和BeanFactory初始化相似,ApplicationContext初始化也很简单
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");

初期豆のApplicationContextのインスタンス化しながら、すべての単一のインスタンスを、ApplicationContextのたBeanFactory初期化と有意差を初期化するには、コンテナが最初に豆を訪問したときにのみ作成されたときにビーンたBeanFactoryが初期化初期化されませんでした。したがって、ApplicationContextの初期化時間が少し長くなります。
3.WebApplicationContext
  WebApplicationContextは初期化を完了するために、コンフィギュレーションファイルをロードパスのルートディレクトリへのWeb相対ことを可能にするWebアプリケーションのために特別に用意されています。WebApplicationContextのServletContext参照から取得することができ、全体のオブジェクトは、アプリケーション・コンテキストを春することができ、Webアプリケーション環境にアクセスするには、属性としてのServletContext WebApplicationContext内に配置されています。ConfigurableWebApplicationContextは、WebApplicationContextを拡張し、WebApplicationContextの構成例を可能にする2つの重要な方法を定義します。

setServletContext(のServletContextのServletContext):为春设置のServletContext

setConfigLocation(String []型configLocations):セットSpring構成ファイルのアドレス。

タイミング及び方法を初期化WebApplicationContextある:ServletContextオブジェクトを監視するために設けられたのContextLoaderListenerリスナースプリングの使用は、作成されたServletContextオブジェクトが作成されるときに、オブジェクトが作成され、WebApplicationContextが初期化されます。したがって、我々は唯一のweb.xmlにリスナーを構成する必要があります。

<!-- 利用Spring提供的ContextLoaderListener监听器去监听ServletContext对象的创建,并初始化WebApplicationContext对象 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Context Configuration locations for Spring XML files(默认查找/WEB-INF/applicationContext.xml) -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

4.BeanFactory、ApplicationContextのとWebApplicationContextとの間の差異
  春はビーンをインスタンス化し、ビーン間の依存関係を確立することができ、反射技術のJava言語によって、コンフィギュレーションファイルを介して豆と豆の間の依存関係を記述します。これらの低レベルの作業が完了するとスプリングIoCコンテナだけでなく、キャッシュBeanインスタンス、ライフサイクル管理、イベント発行、リソースのローディングおよびその他の高度なサービスを提供します。

ばねたBeanFactoryはのIoCの高度な設定メカニズムを提供するコアインタフェースです。ApplicationContextたBeanFactoryは、複数のアプリケーション指向の機能を提供し、サブインターフェースたBeanFactoryに基づいています。我々は、一般的にもSpringコンテナとしても知られているアプリケーションのためのIoCコンテナたBeanFactory、ApplicationContextのコンテキストと呼ばれます。初期化を完了するために、コンフィギュレーションファイルをロードパスのルートディレクトリへのWeb相対ことを可能にする準備ができてWebアプリケーションのために設計されWebApplicationContext、サブインターフェースのApplicationContextインタフェースです。

たBeanFactoryは、自分自身のための春Springフレームワークの基礎であり、ApplicationContextのSpringフレームワークを使用する開発者のために、ほぼすべての私たちが代わりに基礎となるの直接のApplicationContextたBeanFactoryを使用するアプリケーションの、WebApplicationContextは、Webアプリケーション用に設計されています。
  父と息子の容器
  HierarchicalBeanFactoryインタフェースを介して、春のIoCコンテナは、親子階層システムに関連付けることができます。子コンテナ豆の親コンテナへのアクセスを、親コンテナは、ビーンの子コンテナにアクセスすることはできません。

スプリングサンズコンテナは、ビーンは、親コンテナに配置スプリングMVCコントローラ豆位置サブコンテナ、サービス及び永続層などの多くの機能を使用して実装しました。しかし、そうであっても、コントローラは、コントローラビーンは表示されませんビーンビーンの永続化層とビジネス層、およびサービス層と永続化層を参照することができます。

おすすめ

転載: blog.csdn.net/qq_43378945/article/details/102657414