Spring心得2--beanのライフサイクル@Springリスナーの役割@Spring初期化コンテナケース分析@webプロジェクト使用


Scopeのデフォルトはsingleton、lazy-initのデフォルトはdefault、defaultはfalseに相当します
1.beanのライフサイクル
beanが容器にロードされると、彼のライフサイクルが始まります.bean工場は1つのbeanが使用できる前に多くの仕事を完成します.
1).コンテナはbeanの定義情報を探してインスタンス化する.
2).依存注入を用いてspringはbean定義情報に従ってbeanのすべての属性を構成する.
3).beanがBeanName Awareインタフェースを実現した場合、工場はBeanのsetBeanName()メソッドを呼び出してbeanのIDを渡す.
4).beanがBeanFactoryAwareインタフェースを実現した場合、工場はsetBeanFactory()メソッドを呼び出して工場自身に転送する.
5).BeanPostProcessorがbeanに関連付けられている場合、それらのpostProcessBeforeInitialization()メソッドが呼び出されます.
6).beanがini-methodメソッドを指定すると、呼び出されます.
7).最後に、BeanPostProcessorとbeanが関連付けられている場合、それらのpostProcessAfterInitialization()メソッドが呼び出される.
2.Springリスナーの役割
springプロファイルを自動的にロードするには、Web.xmlファイルに構成を追加する必要があります.

contextConfigLocation
classpath*:applicationContext-*.xml


 
org.springframework.web.context.ContextLoaderListener 


ContextLoaderListenerの役割は、Webコンテナを起動するときにApplicationContextの構成情報を自動的にアセンブリすることです.サーブレットContextListenerというインタフェースが実装されているため、Web.xmlでこのリスナーを構成し、コンテナを起動すると、実装方法がデフォルトで実行されます.ApplicationContext.xmlこのプロファイルがどこに配置されているかについては、複数のxmlファイルをどのように構成するか、APIドキュメントを表示し、ContextLoaderListenerにContextLoaderというクラスが関連付けられているため、ロード構成プロセス全体がContextLoaderによって完了します.
APIを参照すると、ContextLoaderはContextLoaderListenerとContextLoaderServiceによって生成できることがわかります.ContextLoaderServiceのAPIを表示すると、ContextLoaderというクラスにも関連付けられており、HttpServiceというインタフェースを実現していることがわかります.
ContextLoaderはXmlWebApplicationContextというクラスを作成しています.インタフェースはWebApplicationContext->C o n f i g u r a bleWebApplicationContext->ApplicationContext->BeanFactoryというようにspring内のすべてのbeanがこのクラスによって作成されます.
アプリケーションContextのxmlファイルを配備する方法は、Web.xmlにパラメータ設定情報が書かれていない場合、デフォルトのパスは「/WEB-INF/アプリケーションContext.xml.WEB-INFディレクトリの下で作成したxmlファイルの名前はアプリケーションContext.xmlである必要があります.ファイル名をカスタマイズする場合は、Web.xmlにcontextConfigLocationというcontextパラメータを追加できます.

        contextConfigLocation
       
           /WEB-INF/classes/applicationContext-*.xml
       

 

     で対応するxmlファイル名を指定します.複数のxmlファイルがある場合は、「,」の番号で区切ることができます.上のアプリケーションContext-*.xmlはワイルドカードを使用します.たとえば、このディレクトリの下にアプリケーションContext-ibatis-base.xml、アプリケーションContext-action.xml、アプリケーションContext-ibatis-dao.xmlなどのファイルが一緒にロードされます.
注意:
beans.xmlファイルがsrcディレクトリの下に置かれている場合、ApplicationContext ctx=new ClassPathXmlApplicationContext(「beans.xml」)を生成します.ただし、ApplicationContext.xmlがWEB-INFの下のClassesディレクトリの下に置かなければ、ApplicationContext ctx=new ClassPathXmlApplicationContext(「ApplicationContext.xml」)を使用できません.;ApplicationContextを生成し、WEB-INFの下に直接置くと、アプリケーションContextファイルが見つからないという異常を投げ出す
3.Spring初期化容器ケーススタディ
package www.csdn.spring.test;

 

import java.beans.XMLDecoder;

 

import org.junit.Test;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

import org.springframework.core.io.ClassPathResource;

import org.springframework.core.io.FileSystemResource;

import www.csdn.spring.service.HelloService;

import www.csdn.spring.service.impl.HelloServiceImpl;

 

publicclass FactoryTest {

 

   @Test

   publicvoid testFacory() {

      /*

       * Spring     .         :

       *  、ClassPathXmlApplicationContext:       。

       *  、FileSystemXmlApplicationContext:       。

       *  、XmlWebApplicationContext: web     。 InputStreamResource      。

       *      :    InputStreamResource

       * InputStreamResource res = new InputStreamResource(new

       * FileInputStream("D:\\Ncode\\mcode\\sday02\\src\\spring.xml"));

       * 

       * isOpen(){ return true;}

       */

 

      //            bean             ,               springHelloJava         

      /*//   :FileSystemResource    

      FileSystemResource fileResource = new FileSystemResource(

            "F:\\csdn-study\\MyWorkspace\\springHelloJava\\src\\spring.xml");

            

      //   :ClassPathResource    

      ClassPathResource classResource = new ClassPathResource("spring.xml");

      BeanFactory factory = (BeanFactory) new XmlBeanFactory(classResource);     

       */

      

      //   :FileSystemXmlApplicationContext ClassPathXmlApplicationContext     

      //BeanFactory factory = new FileSystemXmlApplicationContext("F:\\csdn-study\\MyWorkspace\\springHelloJava\\src\\spring.xml");

      

      ApplicationContext factory = new ClassPathXmlApplicationContext("classpath:spring.xml");

      

      HelloService helloservice = (HelloService) factory

            .getBean("helloServiceImpl",HelloServiceImpl.class);

      helloservice.sayHello();

   }

 

}

4.web    spring     

                   ,    spring             

spring.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">

 

 

   <!-- spring        、  、  Bean                -->

   <bean id="helloDaoImpl" class="www.csdn.spring.dao.impl.HelloDaoImpl" scope="singleton" lazy-init="default"></bean>

</beans>

Web.xml    

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" 

   xmlns="http://java.sun.com/xml/ns/javaee" 

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <display-name></display-name>

 

  <context-param>

     <param-name>contextConfigLocation</param-name>

     <!--    classpath   spring.xml src   

     <param-value>classpath:spring.xml</param-value>

      -->

      <!--            -->

     <param-value>/WEB-INF/classes/www/csdn/spring/resource/spring.xml</param-value>

  </context-param>

  

  <listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

  </listener>

 

  <servlet>

    <servlet-name>HelloServlet</servlet-name>

    <servlet-class>www.csdn.spring.servlet.HelloServlet</servlet-class>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>HelloServlet</servlet-name>

    <url-pattern>/servlet/HelloServlet</url-pattern>

  </servlet-mapping>

  

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>

 

HelloServlet 

package www.csdn.spring.servlet;

 

import java.io.IOException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.web.context.WebApplicationContext;

import org.springframework.web.context.support.WebApplicationContextUtils;

import org.springframework.web.context.support.XmlWebApplicationContext;

 

import www.csdn.spring.dao.HelloDao;

import www.csdn.spring.dao.impl.HelloDaoImpl;

 

public class HelloServlet extends HttpServlet {

 

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

 

              doPost(request, response);

       }

 

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

 

              /*// 1.  XmlWebApplicationContext    

              XmlWebApplicationContext context = new XmlWebApplicationContext();

 

              

               *      /WEB-INF/applicationContext.xml,applicationContext.xml    

               *      ,      spring.xml;

               *         ,      src        /WEB-INF/classes/applicationContext.xml;

               *       ,         classes    ,  :

              

              //  spring  

              context.setConfigLocation("/WEB-INF/classes/www/csdn/spring/resource/spring.xml");

              // servlet         spring      

              context.setServletContext(getServletContext());

              //    

              context.refresh();

              HelloDao helloDao = (HelloDao) context.getBean("helloDaoImpl");

              helloDao.sayHello();

              // XmlWebApplicationContext context = new XmlWebApplicationContext();

 

              System.out.println("=======================");*/

              

              //2.  WebApplicationContextUti    

 

              //      ,spring        spring    ,              ,    web.xml       ,          spring       

              WebApplicationContext contexts = WebApplicationContextUtils

                            .getWebApplicationContext(getServletContext());

              HelloDao helloDaos = contexts.getBean("helloDaoImpl", HelloDaoImpl.class);

              helloDaos.sayHello();

 

       }

}