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初期化容器ケーススタディ
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ファイルに構成を追加する必要があります.
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パラメータを追加できます.
/WEB-INF/classes/applicationContext-*.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();
}
}