Web层关于获取applicationContext的项目测试

Spring整合Web项目:

步骤一:创建web项目,引入jar包:
引入基本6个开发包:
步骤二:创建包结构:
* com.itheima
           * web层
                           * UserServlet
           * service层
                            * UserService
          * dao层
                          * UserDao
步骤三:创建Spring的配置文件:
配置Service和DAO到Spring的配置文件中:
1
2
3
4
< bean id = "userService" class = "com.itheima.service.UserService" >
         < property name = "userDao" ref = "userDao" />
</ bean >  
< bean id = "userDao" class = "com.itheima.dao.UserDao" ></ bean >
步骤四:在Servlet中获得Service对象:
1
2
3
4
5
6
7
// 创建工厂:(方法不好,因为每次在刷新页面时,都会去创建工厂,效率低)
         ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                 "applicationContext.xml" );
         UserService userService = (UserService) applicationContext
                 .getBean( "userService" );
         System.out.println( "UserServlet的方法执行了..." );
         userService.save();
步骤五:发现问题: 
访问Servlet:创建Spring工厂,不停刷新,不停创建工厂.(效率太低)
* 解决问题:
          * 一种:将工厂的创建放入到Servlet的init方法中.(这种方式不好:多个Servlet的情况,创建一个Servlet创建一个Spring的工厂.)
  ***** 二种:将工厂创建好了以后放入到ServletContext域中.使用工厂的时候,从ServletContext中获得.
          * ServletContextListener:用来监听ServletContext对象的创建和销毁的监听器.
          * 当ServletContext对象创建的时候:创建工厂 , 将工厂存入到ServletContext.
                ServletContext域只会创建一次,所以就把工程存方到ServletContext中去,这样的话,工厂也就只创建一次
                工厂创建存入到ServletContext中的过程其实是由监听器完成的,所以我们要是不配置监听器的话,就是无效的。

* Spring整合Web项目:(已经把applicationContext初始化工厂放入监听器初始化方法中,所以我们只需开启这个监听器)
               * 引入spring-web-3.2.0.RELEASE.jar包.---->目的:Spring整合Web项目,监听器在里面
 

* 配置监听器:

1
2
3
4
<!-- 配置Spring的核心监听器: -->
  < listener >
     < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class >
  </ listener >
  因为tomcat设置Spring配置文件默认是在WEB-INF下的

所以要修改applicationContext.xml文件的路径的全局初始化参数设置。

1
2
3
4
<context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
步骤六:在Servlet中获得工厂
* 从ServletContext中获得工厂:
* 两种方式获得:
          * 获得ServletContext.getAttribute(“...”);
          * WebApplicationContextUtils.getWebApplicationContext(ServletContext context);
                   返回一个applicationContext对象,可以直接调用getBean()方法


来自为知笔记(Wiz)


你可能感兴趣的:(Web层关于获取applicationContext的项目测试)