使用spring等框架的web程序在Tomcat下的启动顺序及思路理清

大牛请绕过,此文仅针对自己小白水平,对web程序的启动流程做个清晰的回顾。

一.使用spring等框架的web程序在Tomcat下的启动流程

1)Tomcat是根据web.xml来启动的。首先到web.xml

2)web.xml中负责启动spring和spring mvc。对应的启动配置文件分别是

启动spring mvc,并进行所有资源路径映射

<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/cfg/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

启动spring,通过ContextLoaderListener

     <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/cfg/spring.xml</param-value>
	</context-param>

3)spring中对一些orm框架的启动,包括Mybatis/hibernate。orm框架的启动基本都是通过sqlsessionFactory bean来启动的。

并配置各种bean到ioc容器中。包括datasource等。

4)web应用程序中,spring相当于程序运行的平台,spring对整个程序提高供ioc支持和aop支持。

spring提供注解如@service @repository @component将各种类注册到ioc容器中。通过设置scan package的方式,spring在启动时候会扫描包下的所有注解,并将它们注册到ioc容器中。并针对@autowired @resource,将一些bean从ioc容器中获取填充到bean的构造属性中。

spring会自动扫描如下包中的注解:

<context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>

以上可以看出spring所有的bean注入都是在spring.xml中配置的,所有的bean注入都在spring.xml中配置的。

@autowired @resource只针对于类的成员变量,不针对方法里的局部变量。

注:正是spring的ioc支持了controller层注入service,service注入dao。打通了各层之间的桥梁,省去了原来的new service(),new Dao()的方法。

问答

1.使用spring ioc有什么好处?

答:网上有很多介绍使用Spring IOC容器的好处的文章,我看到的主要有两点, 
1.方便测试,当需要测试的类依赖其他的类时,可以为依赖的类做个mock,然后注入进来。 
2.方便维护及升级,当某个类需要修改实现时,只要接口没变,则无需修改源代码,重写一个实现类,修改下配置即可。

3.默认下,IOC容器管理的bean都是单例的,不会被gc掉。

4.spring提倡面向接口开发,因此在servcie里面的dao直接是接口就可以了。这样有助于解耦。(测试等等)。。

如果不用spring,要么自己new daoimpl,就面向具体了,如果还想抽象,就必须自己写工厂——其实spring就是一个工厂IOC。实现类似的作用。

其实,面向抽象是实现和接口分离,对于多数的项目,实现大量变化的机会不是很大,因此直接面向具体(省略掉dao接口等)是我个人推荐的做法。

spring工厂对其中的对象的生命周期,作用范围都有很明确的定义,很容易使用,如果自己做这么一套,只怕没这么好。

第三,spring对ioc管理的对象,可以做很多增强,比如aop,代理等等。

5.感觉AOP最有用了。

2.spring是怎样支持面向接口编程的?

由于依赖于接口,可以通过依赖注入随时替换DAO接口的实现类,而应用程序完全不用了解接口与底层数据库操作细节。

应用程序----调用-----》DAO接口《---实现--DAO接口实现类----操作------》数据库

时间: 2024-10-27 03:15:24

使用spring等框架的web程序在Tomcat下的启动顺序及思路理清的相关文章

IDEA创建一个Spring MVC 框架Java Web项目,Gradle构建

注:此篇有些细节没写出,此文主要写重要的环节和需要注意的地方,轻喷 新建项目 选择Gradle , 勾选java 和 web.之后就是设定项目路径和名称,这里就不啰嗦了. build.gradle文件下导入所需要的包,刷新一下. 1 group 'com.benjious.createTest' 2 version '1.0-SNAPSHOT' 3 4 apply plugin: 'java' 5 apply plugin: 'war' 6 7 sourceCompatibility = 1.8

Spring boot打包为可部署在tomcat下运行的war文件的方法(使用Gradle、Intellij IDEA)

使用Gradle: dependencies { compile("org.springframework.boot:spring-boot-starter-web") providedCompile("org.springframework.boot:spring-boot-starter-tomcat")//此处使用providedCompile,则生成的jar包可放入tomcat内运行// compile("org.springframework.b

Cocos2d-x程序在Android下的启动过程

注:原文也在公司内部论坛上发了 本文通过分析cocos2d-x(分析版本为cocos2d-x-2.2.1)自身提供的示例程序HelloLua(在目录$(sourcedir)\samples\Lua\HelloLua\下)来分析cocos2d-x的在android平台下的具体启动过程. 我们知道android平台的游戏是从一个Activity开始的.HelloLua的启动Activity是在文件HelloLua.java中定义的,相关代码如下: public class HelloLua exte

Mybatis在Spring环境下的启动顺序

主要看三个类: mybatis-spring-1.2.2.jar包 -> org.mybatis.spring.SqlSessionFactoryBean mybatis-3.2.6.jar包 -> org.apache.ibatis.builder.xml.XMLConfigBuildermybatis-3.2.6.jar包 -> org.apache.ibatis.session.Configuration 1. 在spring的RootConfig配置类(或配置文件)里创建并返回一

java web应用在tomcat下servlet api包冲突问题

在tomcat 7.0.59版本下,java打得war包依赖了service api的包,然后tomcat启动报了下面的错,导致应用启动失败,访问不了. Mar 20, 2015 11:29:09 PM org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile(/home/ubuntu/apache-tomcat-7.0.59/webapps/jiagoushi/WEB-INF/lib/s

Java程序读取tomcat下的properties配置文件

代码如下: //找到tomcat/etc/wx文件夹 private static String getPropFolderPath() { /* Properties p = System.getProperties(); p.list(System.out);*/ //获取tomcat的路径 String path = System.getProperty("catalina.home"); if (StringUtils.isEmpty(path)) { path = Query

SSM框架Web程序的流程(Spring SpringMVC Mybatis)

SSM框架的Web程序主要用到了三个技术: Spring:用到了注解和自动装配,就是Spring的两个精髓IOC(反向控制)和 AOP(面向切面编程). SpringMVC:用到了MVC模型,将逻辑代码放到Controller层处理. Mybatis:用到了与数据库打交道的层面,放在所有的逻辑之后,处理与数据库的CRUD相关的操作. 要完成一个功能: 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前). 写Mapper.xml(Myba

为Web程序员准备的10个最棒的jQuery视频插件

众多的插件使得 jQuery 成为一个非常流行的框架.现在网站中视频和音频的使用比之前要频繁的多了.而使用jQuery插件可以让这个步骤变得简单很多.因此这里收集了10个非常棒的jQuery视频插件供你选择. 1. Bigvideo.js 这个插件可以很方便的为你的网站添加视频背景.它可以无声的播放背景视频(或一系列视频).你也可以用它制作视频播放列表. BigVideo.js还可以显示大背景图片,这对于不支持自动播放视频的设备来说是非常适合的. 2. jPlayer jPlayer 是一个用J

JAVA程序获取Tomcat的运行状态

用浏览器来查看Tomcat的运行状态: 配置Tomcat的管理用户和权限. 打开%Tomcat_Home%/conf/目录下的tomcat-user.xml文件,配置以下内容: <role rolename="manager-status"/> <role rolename="manager"/>   <role rolename="manager-jmx"/>  <role rolename="