2012-07-06 20 views
7

私はSpring Frameworkの初心者です。春の基本的な理解について私を案内してください。私はJavaとJSFを知っていますが、私はStrutsや他のフレームワークについては何も知らないのです。私はインターネットを検索してPDFをダウンロードできましたが、私はJSFの流れを理解しているようにSpringの流れを理解していません。 Springの流れを理解するための簡単な方法のリンクを私に提供してください。基本的なSpringフレームワークとトータルフローの理解

答えて

3

私はSpring Frameworkも新しくなっています。 これまでに、以下の文書が最も基本的なものです。私もそれを読んで、それがあなたを助けることを願っています。

Introduction to Spring Framework

+0

私は実際にそれが良かったの開始が、起こって、その文書を持っているおかげで、私はので、私は求めています感じたいくつかのlacknessがあり、我々はそれを我々が理解できる3回行くこともあれば、私は思いますスー、とにかくありがとう。 – user1407297

+0

こんにちは、もう一度私です。私がIoCやAOPのような用語で完全に混乱した時、私はこのサイトを見つけました。それは本当に基本的で明確です.http://www.springbyexample.org – POPOL

2

私も春に新しいですし、時間前に同様の質問がありました。まず第一に私はCraig Wallsの「Spring in Action」の本をお薦めしたいと思います。私はそれが非常に有用で理解しやすいと感じました。また、 http://www.tutorialspoint.com/spring/は多くのことを理解する助けになりました。私があなたの質問を正しく理解すれば、 "Springの流れ"をSpringのIoCコンテナとSpring Beanのライフサイクルに分けることができます。ここでは、Spring Beanのライフサイクルでexapmleを使用した非常に小さな概要を示します。 Beanは、Springの コンテナで、作成と破棄の間のいくつかのステップを実行します。

    1. インスタンス化
    2. 移入特性
    3. BeanNameAware`s setBeanName()
    4. BeanFactoryAware`s setBeanFactory
    5. ApplicationContextAware`s setApplicationContext()
    6. プレ初期化BeanPostProcessors
    7. :これらの手順であります
    8. InitializingBeanのafterPropertiesSet()
    9. コールカスタムのinitメソッド
    10. 後の初期化BeanPostProcessors
    11. DisponsableBean`sが
    12. コールカスタム破壊法を

    を破壊する各ステップは、カスタマイズのための独自のoportunitiesを提供します。

    豆にClassAの場合:CustomPostProcessorについては

    public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{ 
    
        private String messageA; 
    
        public ClassA() { 
         System.out.println("ClassA: default constructor called."); 
        } 
    
        public void customInitMethod(){ 
         System.out.println("ClassA: customInitMethod() method called."); 
        } 
    
        public void customDestroyMethod(){ 
         System.out.println("ClassA: customDestroyMethod() method called."); 
    
        } 
    
        public String getMessageA() { 
         System.out.println("ClassA: message get method called."); 
         return messageA; 
        } 
    
        public void setMessageA(String message) { 
         System.out.println("ClassA: message set method called."); 
         this.messageA = message; 
        } 
    
        public void afterPropertiesSet() throws Exception { 
         System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface."); 
        } 
    
        public void destroy() throws Exception { 
         System.out.println("ClassA: destroy() called because DisposableBean interface."); 
        } 
    
        public void setApplicationContext(ApplicationContext arg0) 
          throws BeansException { 
         System.out.println("ClassA: application context set: " + arg0.getApplicationName()); 
        } 
    
        public void setBeanFactory(BeanFactory arg0) throws BeansException { 
         System.out.println("ClassA: beanFacrory set."); 
        } 
    
        public void setBeanName(String arg0) { 
         System.out.println("ClassA: bean name set: " + arg0); 
        } 
    
    }public class ClassA implements InitializingBean, DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware{ 
    
        private String messageA; 
    
        public ClassA() { 
         System.out.println("ClassA: default constructor called."); 
        } 
    
        public void customInitMethod(){ 
         System.out.println("ClassA: customInitMethod() method called."); 
        } 
    
        public void customDestroyMethod(){ 
         System.out.println("ClassA: customDestroyMethod() method called."); 
    
        } 
    
        public String getMessageA() { 
         System.out.println("ClassA: message get method called."); 
         return messageA; 
        } 
    
        public void setMessageA(String message) { 
         System.out.println("ClassA: message set method called."); 
         this.messageA = message; 
        } 
    
        public void afterPropertiesSet() throws Exception { 
         System.out.println("ClassA: afterPropertiesSet() called because InitializingBean interface."); 
        } 
    
        public void destroy() throws Exception { 
         System.out.println("ClassA: destroy() called because DisposableBean interface."); 
        } 
    
        public void setApplicationContext(ApplicationContext arg0) 
          throws BeansException { 
         System.out.println("ClassA: application context set: " + arg0.getApplicationName()); 
        } 
    
        public void setBeanFactory(BeanFactory arg0) throws BeansException { 
         System.out.println("ClassA: beanFacrory set."); 
        } 
    
        public void setBeanName(String arg0) { 
         System.out.println("ClassA: bean name set: " + arg0); 
        } 
    
    } 
    

    :メインクラスで

    public class CustomPostProcessor implements BeanPostProcessor { 
    
        public Object postProcessBeforeInitialization(Object bean, String beanName) 
          throws BeansException { 
         System.out.println("CustomPostProcessor: beforeInitialization on: " 
           + beanName); 
         return bean; 
        } 
    
        public Object postProcessAfterInitialization(Object bean, String beanName) 
          throws BeansException { 
         System.out.println("CustomPostProcessor: afterInitialization on: " 
           + beanName); 
         return bean; 
        } 
    
    } 
    

    我々はApplicationContextの作成、豆や印刷を取得ここで生活bean`s単に「痕跡」は、いくつかのコードがありますメッセージアウト:

    public static void main(String[] args) { 
         AbstractApplicationContext context = new ClassPathXmlApplicationContext(
           "META_INF/spring/app-context.xml"); 
    
         ClassA objA = (ClassA) context.getBean("classA"); 
    
         System.out.println(objA.getMessageA()); 
    
         context.registerShutdownHook(); 
        } 
    

    アプリコンテキストファイルでは、

    <bean id="classA" class="ClassA" init-method="customInitMethod" 
         destroy-method="customDestroyMethod"> 
        <property name="messageA" value="messagA: Hello Spring!" /> 
    </bean> 
    
    <bean class="CustomPostProcessor" /> 
    

    私は出力ラインを理解したように、ライフサイクルステージにこのように対応しています

    • 1.Instantiate

    にClassA:デフォルトコンストラクタが呼ばれます。

    • 2.Populate特性

    A級:と呼ばれるメッセージを設定方法。 3.BeanNameAware`s setBeanName()

    ClassAクラス:Bean名セット:クラスA

    • 4.BeanFactoryAware`s setBeanFactory

    A級:beanFacroryセット。

    • 5.ApplicationContextAware`s setApplicationContext()

    A級:アプリケーション・コンテキストのセット:

    • 6.Pre初期化BeanPostProcessors

    CustomPostProcessor:beforeInitializationで:クラスA

    • 7.InitializingBean`s afterPropertiesSet()

    A級:afterPropertiesSet()InitializingBeanインタフェースため呼ばれます。

    • 8.Callカスタムのinitメソッド

    にClassA:customInitMethod()メソッドが呼び出されます。

    • 9.Post初期化BeanPostProcessors

    CustomPostProcessor:afterInitialization上:メソッドが呼び出されますメッセージ:クラスA

    • プログラムは、メッセージ

    にClassAを印刷します。 messagA:こんにちは春!

    • 10.DisponsableBean`s

    A級破壊:破壊()DisposableBeanインタフェースため呼ばれるが。

    • 11.Callカスタム破壊法

    にClassA:customDestroyMethod()メソッドが呼び出されます。

    7
    • 変遷1 - ユーザーが最初にweb.xmlに与えられているハイパーリンクなどの要求をクリック で/フォームを提出することによって、サーバーにリクエストを送信します。
    • 遷移2 - WEB.XMLは、タグで を見てDispatcherServletに要求をルーティングします。
    • 遷移3 - DispatcherServletの内部 最初の 'HandlerMapping'要求が適切な 'Controller'に渡されます。
    • 移行4 - コントローラは、要求を適切なModelクラスにマップします。すべて BUSINESS LOGICはModelクラス内で実行されます。
    • 移行5 - データベース 操作が必要な場合、モデルクラスは要求を適切な DAOにルーティングします。すべてのデータベース操作はDAOで実行する必要があります。
    • Transition6 - 必要に応じて、属性をrequest/session/application スコープに追加し、Modelに戻ります。
    • 移行7 - 必要に応じて、 属性を要求/セッション/アプリケーションスコープに割り当て、 コントローラに戻ります。
    • 移行8 - コントローラは、それを任意のビュー (JSP/HTMLなど)に戻すだけです。
    • 移行9 - JSP/Htmlはユーザーに表示されます。

    Spring MVC Application Flow:

    関連する問題