搜档网
当前位置:搜档网 › springMVC详解以及注解说明

springMVC详解以及注解说明

springMVC详解以及注解说明
springMVC详解以及注解说明

springMVC详解以及注解说明

基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置Bean、装配Bean 的功能,您可以使用基于注释的Spring IoC 替换原来基于XML 的配置。本文通过实例详细讲述了Spring 2.5 基于注释IoC 功能的使用。

概述

注释配置相对于XML 配置具有很多的优势:

? 它可以充分利用Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用JPA 注释配置ORM 映射时,我们就不需要指定PO 的属性名、类型等信息,如果关系表字段和PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过Java 反射机制获取。

? 注释和Java 代码位于一个文件中,而XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和Java 代码放在一起,有助于增强程序的内聚性。而采用独立的XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。

因此在很多情况下,注释配置比XML 配置更受欢迎,注释配置有进一步流行的趋势。Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分XML 配置的功能。在这篇文章里,我们将向您讲述使用注释进行Bean 定义和依赖注入的内容。

Spring2.5的注释

Spring 2.5 提供了AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 和RequiredAnnotationBeanPostProcessor这四个主要的关于Annotation 的BeanPostProcessor。

我们可以使用 来方便地、一次性的声明者四个BeanPostProcessor。

1.Autowired... 提供对Spring 特有的Autowired 和Qualifier 注释。

2.CommonAnotation... 用于支持JSR 250 的注释

3.Persistence... 用于JPA 的PersistenceUnit 和PersistenceContext 注释4.Required... 用于检查被Required 注释标记的属性是否被设定

原来我们是怎么做的

在使用注释配置之前,先来回顾一下传统上是如何配置Bean 并完成Bean 之间依赖关系的建立。下面是3 个类,它们分别是Office、Car 和Boss,这3 个类需要在Spring 容器中配置为Bean:

Office 仅有一个属性:

清单1. Office.java

package com.baobaotao;

public class Office {

private String officeNo =”001”;

//省略get/setter

@Override

public String toString() {

return "officeNo:" + officeNo;

}

}

Car 拥有两个属性:

清单2. Car.java

public class Car {

private String brand;

private double price;

// 省略get/setter

@Override

public String toString() {

return "brand:" + brand + "," + "price:" + price;

}

}

Boss 拥有Office 和Car 类型的两个属性:

清单3. Boss.java

package com.baobaotao;

public class Boss {

private Car car;

private Office office;

// 省略get/setter

@Override

public String toString() {

return "car:" + car + "\n" + "office:" + office;

}

}

我们在Spring 容器中将Office 和Car 声明为Bean,并注入到Boss Bean 中:下面是使用传统XML 完成这个工作的配置文件beans.xml:

清单4. beans.xml 将以上三个类配置成Bean

xmlns:xsi="https://www.sodocs.net/doc/0a7922006.html,/2001/XMLSchema-instance"

xsi:schemaLocation="https://www.sodocs.net/doc/0a7922006.html,/schema/beans

https://www.sodocs.net/doc/0a7922006.html,/schema/beans/spring-beans-2.5.xsd">

当我们运行以下代码时,控制台将正确打出boss 的信息:

清单5. 测试类:AnnoIoCTest.java

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnoIoCTest {

public static void main(String[] args) {

String[] locations = {"beans.xml"};

ApplicationContext ctx =

new ClassPathXmlApplicationContext(locations);

Boss boss = (Boss) ctx.getBean("boss");

System.out.println(boss);

}

}

这说明Spring 容器已经正确完成了Bean 创建和装配的工作。

使用@Autowired 注释(按类型匹配)

Spring 2.5 引入了@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。来看一下使用@Autowired 进行成员变量自动注入的代码:

清单6. 使用@Autowired 注释的Boss.java

import org.springframework.beans.factory.annotation.Autowired;

public class Boss {

@Autowired

private Car car;

@Autowired

private Office office;

}

Spring 通过一个BeanPostProcessor 对@Autowired 进行解析,所以要让@Autowired 起作用必须事先在Spring 容器中声明AutowiredAnnotationBeanPostProcessor Bean。

清单7. 让@Autowired 注释工作起来

xmlns:xsi="https://www.sodocs.net/doc/0a7922006.html,/2001/XMLSchema-instance"

xsi:schemaLocation="https://www.sodocs.net/doc/0a7922006.html,/schema/beans

https://www.sodocs.net/doc/0a7922006.html,/schema/beans/spring-beans-2.5.xsd">

这样,当Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描Spring 容器中所有Bean,当发现Bean 中拥有@Autowired 注释时就找到和其匹配(默认按类型匹配)的Bean,并注入到对应的地方中去。

按照上面的配置,Spring 将直接采用Java 反射机制对Boss 中的car 和office 这两个私

有成员变量进行自动注入。所以对成员变量使用@Autowired 后,您大可将它们的setter 方法(setCar() 和setOffice())从Boss 中删除。

当然,您也可以通过@Autowired 对方法或构造函数进行标注,来看下面的代码:

清单8. 将@Autowired 注释标注在Setter 方法上

@Autowired

public void setCar(Car car) {

this.car = car;

}

@Autowired

public void setOffice(Office office) {

this.office = office;

}

}

这时,@Autowired 将查找被标注的方法的入参类型的Bean,并调用方法自动注入这些Bean。而下面的使用方法则对构造函数进行标注:

清单9. 将@Autowired 注释标注在构造函数上

package com.baobaotao;

public class Boss {

private Car car;

private Office office;

@Autowired

public Boss(Car car ,Office office){

由于Boss() 构造函数有两个入参,分别是car 和office,@Autowired 将分别寻找和它们类型匹配的Bean,将它们作为Boss(Car car ,Office office) 的入参来创建Boss Bean。

当候选Bean 数目不为 1 时的应对方法

在默认情况下使用@Autowired 注释进行自动注入时,Spring 容器中匹配的候选Bean 数目必须有且仅有一个。当找不到一个匹配的Bean 时,Spring 容器将抛出BeanCreationException 异常,并指出必须至少拥有一个匹配的Bean。我们可以来做一个实验:

清单10. 候选Bean 数目为0 时

由于office Bean 被注释掉了,所以Spring 容器中将没有类型为Office 的Bean 了,而Boss 的office 属性标注了@Autowired,当启动Spring 容器时,异常就产生了。

当不能确定Spring 容器中一定拥有某个类的Bean 时,可以在需要自动注入该类Bean 的地方可以使用@Autowired(required = false),这等于告诉Spring:在找不到匹配Bean 时也不报错。来看一下具体的例子:

清单11. 使用@Autowired(required = false)

public class Boss {

private Car car;

private Office office;

@Autowired

public void setCar(Car car) {

this.car = car;

}

@Autowired(required = false)

public void setOffice(Office office) {

this.office = office;

}

}

当然,一般情况下,使用@Autowired 的地方都是需要注入Bean 的,使用了自动注入而又允许不注入的情况一般仅会在开发期或测试期碰到(如为了快速启动Spring 容器,仅引入一些模块的Spring 配置文件),所以@Autowired(required = false) 会很少用到。

和找不到一个类型匹配Bean 相反的一个错误是:如果Spring 容器中拥有多个候选Bean,Spring 容器在启动时也会抛出BeanCreationException 异常。来看下面的例子:

清单12. 在beans.xml 中配置两个Office 类型的Bean

我们在Spring 容器中配置了两个类型为Office 类型的Bean,当对Boss 的office 成员变量进行自动注入时,Spring 容器将无法确定到底要用哪一个Bean,因此异常发生了。

Spring 允许我们通过@Qualifier 注释指定注入Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常:

清单13. 使用@Qualifier 注释指定注入Bean 的名称

@Qualifier("office") 中的office 是Bean 的名称,所以@Autowired 和@Qualifier 结合使用时,自动注入的策略就从byType 转变成byName 了。

@Autowired 可以对成员变量、方法以及构造函数进行注释,而@Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以Spring 不将@Autowired 和@Qualifier 统一成一个注释类。下面是对成员变量和构造函数入参进行注释的代码:

对成员变量进行注释:

清单14. 对成员变量使用@Qualifier 注释

public class Boss {

@Autowired

private Car car;

@Autowired

@Qualifier("office")

private Office office;

}

对构造函数入参进行注释:

清单15. 对构造函数变量使用@Qualifier 注释

public class Boss {

private Car car;

private Office office;

@Autowired

public Boss(Car car , @Qualifier("office")Office office){

this.car = car;

this.office = office ;

}

}

@Qualifier 只能和@Autowired 结合使用,是对@Autowired 有益的补充。一般来讲,@Qualifier 对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。

使用JSR-250 的注释

Spring 不但支持自己定义的@Autowired 的注释,还支持几个由JSR-250 规范定义的注释,它们分别是@Resource、@PostConstruct 以及@PreDestroy。

@Resource

@Resource 的作用相当于@Autowired,只不过@Autowired 按byType 自动注入,面

@Resource 默认按byName 自动注入罢了。@Resource 有两个属性是比较重要的,分别是name 和type,Spring 将@Resource 注释的name 属性解析为Bean 的名字,而type 属性则解析为Bean 的类型。所以如果使用name 属性,则使用byName 的自动注入策略,而使用type 属性时则使用byType 自动注入策略。如果既不指定name 也不指定type 属性,这时将通过反射机制使用byName 自动注入策略。

Resource 注释类位于Spring 发布包的lib/j2ee/common-annotations.jar类包中,因此在使用之前必须将其加入到项目的类库中。来看一个使用@Resource 的例子:

清单16. 使用@Resource 注释的Boss.java

package com.baobaotao;

import javax.annotation.Resource;

public class Boss {

// 自动注入类型为Car 的Bean

@Resource

private Car car;

// 自动注入bean 名称为office 的Bean

@Resource(name = "office")

一般情况下,我们无需使用类似于@Resource(type=Car.class) 的注释方式,因为Bean 的类型信息可以通过Java 反射从代码中获取。

要让JSR-250 的注释生效,除了在Bean 类中标注这些注释外,还需要在Spring 容器中注册一个负责处理这些注释的BeanPostProcessor:

CommonAnnotationBeanPostProcessor 实现了BeanPostProcessor 接口,它负责扫描使用了JSR-250 注释的Bean,并对它们进行相应的操作。

@PostConstruct 和@PreDestroy

Spring 容器中的Bean 是有生命周期的,Spring 允许在Bean 在初始化完成后以及Bean 销毁前执行特定的操作,您既可以通过实现InitializingBean/DisposableBean 接口来定制初始化之后/ 销毁之前的操作方法,也可以通过 元素的init-method/destroy-method 属性指定初始化之后/ 销毁之前调用的操作方法。

JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类,分别是@PostConstruct 和@PreDestroy,这两个注释只能应用于方法上。标注了@PostConstruct 注释的方法将在类实例化后调用,而标注了@PreDestroy 的方法将在类销毁之前调用。

清单17. 使用@PostConstruct 和@PreDestroy 注释的Boss.java

public class Boss {

@Resource

private Car car;

@Resource(name = "office")

private Office office;

@PostConstruct

public void postConstruct1(){

System.out.println("postConstruct1");

}

@PreDestroy

public void preDestroy1(){

System.out.println("preDestroy1");

}

}

您只需要在方法前标注@PostConstruct 或@PreDestroy,这些方法就会在Bean 初始化后或销毁之前被Spring 容器执行了。

我们知道,不管是通过实现InitializingBean/DisposableBean 接口,还是通过 元素的init-method/destroy-method 属性进行配置,都只能为Bean 指定一个初始化/ 销毁的方法。但是使用@PostConstruct 和@PreDestroy 注释却可以指定多个初始化/ 销毁方法,那些被标注@PostConstruct 或@PreDestroy 注释的方法都会在初始化/ 销毁时被执行。

通过以下的测试代码,您将可以看到Bean 的初始化/ 销毁方法是如何被执行的:

清单18. 测试类代码

package com.baobaotao;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnoIoCTest {

public static void main(String[] args) {

String[] locations = {"beans.xml"};

ClassPathXmlApplicationContext ctx =

new ClassPathXmlApplicationContext(locations);

Boss boss = (Boss) ctx.getBean("boss");

System.out.println(boss);

ctx.destroy();// 关闭Spring 容器,以触发Bean 销毁方法的执行}

}

这时,您将看到标注了@PostConstruct 的postConstruct1() 方法将在Spring 容器启动时,创建Boss Bean 的时候被触发执行,而标注了@PreDestroy 注释的preDestroy1() 方法将在Spring 容器关闭前销毁Boss Bean 的时候被触发执行。

使用 简化配置

Spring 2.1 添加了一个新的context 的Schema 命名空间,该命名空间对注释驱动、属性文件引入、加载期织入等功能提供了便捷的配置。我们知道注释本身是不会做任何事情的,它仅提供元数据信息。要使元数据信息真正起作用,必须让负责处理这些元数据的处理器工作起来。

而我们前面所介绍的AutowiredAnnotationBeanPostProcessor 和CommonAnnotationBeanPostProcessor 就是处理这些注释元数据的处理器。但是直接在

Spring 配置文件中定义这些Bean 显得比较笨拙。Spring 为我们提供了一种方便的注册这些BeanPostProcessor 的方式,这就是。请看下面的配置:

清单19. 调整beans.xml 配置文件

xmlns:xsi="https://www.sodocs.net/doc/0a7922006.html,/2001/XMLSchema-instance"

xmlns:context="https://www.sodocs.net/doc/0a7922006.html,/schema/context"

xsi:schemaLocation="https://www.sodocs.net/doc/0a7922006.html,/schema/beans

https://www.sodocs.net/doc/0a7922006.html,/schema/beans/spring-beans-2.5.xsd

https://www.sodocs.net/doc/0a7922006.html,/schema/context

https://www.sodocs.net/doc/0a7922006.html,/schema/context/spring-context-2.5.xsd">

将隐式地向Spring 容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 以及equiredAnnotationBeanPostProcessor 这4 个BeanPostProcessor。

在配置文件中使用context 命名空间之前,必须在 元素中声明context 命名空间。使用@Component

虽然我们可以通过@Autowired 或@Resource 在Bean 类中使用自动注入功能,但是Bean 还是在XML 文件中通过 进行定义——也就是说,在XML 配置文件中定义Bean,通过@Autowired 或@Resource 为Bean 的成员变量、方法入参或构造函数入参提供自动注入的功能。能否也通过注释定义Bean,从XML 配置文件中完全移除Bean 定义的配置呢?答案是肯定的,我们通过Spring 2.5 提供的@Component 注释就可以达到这个目标了。

下面,我们完全使用注释定义Bean 并完成Bean 之间装配:

清单20. 使用@Component 注释的Car.java

package com.baobaotao;

import https://www.sodocs.net/doc/0a7922006.html,ponent;

@Component

public class Car {

}

仅需要在类定义处,使用@Component 注释就可以将一个类定义了Spring 容器中的Bean。下面的代码将Office 定义为一个Bean:

清单21. 使用@Component 注释的Office.java

package com.baobaotao;

import https://www.sodocs.net/doc/0a7922006.html,ponent;

@Component

public class Office {

private String officeNo = "001";

}

这样,我们就可以在Boss 类中通过@Autowired 注入前面定义的Car 和Office Bean 了。清单22. 使用@Component 注释的Boss.java

package com.baobaotao;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Required;

import org.springframework.beans.factory.annotation.Qualifier;

import https://www.sodocs.net/doc/0a7922006.html,ponent;

@Component("boss")

public class Boss {

@Autowired

private Car car;

springMVC详解以及注解说明

springMVC详解以及注解说明 基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置Bean、装配Bean 的功能,您可以使用基于注释的Spring IoC 替换原来基于XML 的配置。本文通过实例详细讲述了Spring 2.5 基于注释IoC 功能的使用。 概述 注释配置相对于XML 配置具有很多的优势: ? 它可以充分利用Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用JPA 注释配置ORM 映射时,我们就不需要指定PO 的属性名、类型等信息,如果关系表字段和PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过Java 反射机制获取。 ? 注释和Java 代码位于一个文件中,而XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和Java 代码放在一起,有助于增强程序的内聚性。而采用独立的XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。 因此在很多情况下,注释配置比XML 配置更受欢迎,注释配置有进一步流行的趋势。Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分XML 配置的功能。在这篇文章里,我们将向您讲述使用注释进行Bean 定义和依赖注入的内容。 Spring2.5的注释 Spring 2.5 提供了AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 和RequiredAnnotationBeanPostProcessor这四个主要的关于Annotation 的BeanPostProcessor。 我们可以使用 来方便地、一次性的声明者四个BeanPostProcessor。 1.Autowired... 提供对Spring 特有的Autowired 和Qualifier 注释。

SpringMVC配置的基本步骤

Springmvc框架配置步骤 小弟是个新手,有不对的地方请tell me,一起研究探讨。谢谢。 1062140832@https://www.sodocs.net/doc/0a7922006.html, 配置springmvc框架其实不是很难,要现有一个总体的认识,确定要分几步,每一步主要是干什么,不要太盲目。 以为web.xml是项目的入口,所以所有的配置文件,都必须引入到wem.xml中,不然,配置了等于没用。所以,要先从入口入手。 配置web.xml 1、首先引入springmvc-servlet.xml文件 springMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/mvc/springmvc-servlet.xml 1 2、将spring加载到web.xml中 org.springframework.web.context.ContextLoaderListener 3、配置上下文路径 contextConfigLocation /WEB-INF/spring/spring.xml,/WEB-INF/spring/spring-*.xml 说明:如果有很多的关于spring的配置文件,建议分开写,比如事务一个文件(spring-transaction.xml),springmvc-hibernate.xml一个配置文件,这样方便读写。

spring的@Transactional注解详细用法

spring的@Transactional注解详细用法 各位读友大家好!你有你的木棉,我有我的文章,为了你的木棉,应读我的文章!若为比翼双飞鸟,定是人间有情人!若读此篇优秀文,必成天上比翼鸟! spring的@Transactional注解详细用法Spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API 提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects)支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用提供比其他事务API如JTA更简单的编程式事务管理API与spring数据访问抽象的完美集成事务管理方式spring支持编程式事务管理和声明式事务管理两种方式。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。显然声明式事务管理要优于编程式事务管理,这正是spring

SpringMVC深入总结

一、前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。 官方的下载网址是:https://www.sodocs.net/doc/0a7922006.html,/download(本文使用是的Spring 3.0.5版本) Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都很好。可以参考我写的一篇关于Spring MVC与Struts2与Servlet比较的文章https://www.sodocs.net/doc/0a7922006.html,/admin/blogs/698217 Spring3 MVC的优点: 1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。 2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分) 3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。 Struts2的众多优点:略... (呵呵,是不是不公平?) 众多文章开篇时总要吹些牛,吸引一下读者的眼球,把读者的胃口调起来,这样大家才有兴趣接着往后看。本文也没能例外。不过保证你看了之后不会后悔定有收获。

Spring注解详解

Spring注解详解 目录 一、注解说明 (2) 1.使用简化配置 (2) 2.使用Bean定义注解 (2) 3.Spring支持以下4种类型的过滤方式: (2) 二、注解介绍 (2) 1.@Controller (3) 2.@Service (3) 3.@Autowired (4) 4.@RequestMapping (4) 5.@RequestParam (5) 6.@ModelAttribute (6) 7.@Cacheable和@CacheFlush (7) 8.@Resource (7) 9.@PostConstruct和@PreDestroy (8) 10.@Repository (8) 11.@Component(不推荐使用) (8) 12.@Scope (8) 13.@SessionAttributes (9) 14.@InitBinder (9) 15.@Required (9) 16.@Qualifier (10)

一、注解说明 1.使用简化配置 将隐式地向Spring容器注册以下4个BeanPostProcessor: AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor PersistenceAnnotationBeanPostProcessor RequiredAnnotationBeanPostProcessor 2.使用Bean定义注解 如果要使注解工作,则必须配置component-scan,实际上不需要再配置annotation-config。base-package属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。还允许定义过滤器将基包下的某些类纳入或排除。 3.Spring支持以下4种类型的过滤方式: 1)注解org.example.SomeAnnotation将所有使用SomeAnnotation注解的类过滤出来 2)类名指定org.example.SomeClass过滤指定的类 3)正则表达式com.kedacom.spring.annotation.web..*通过正则表达式过滤一些类 4)AspectJ表达式org.example..*Service+通过AspectJ表达式过滤一些类 二、注解介绍 注解种类: 1)@Controller 2)@Service 3)@Autowired 4)@RequestMapping 5)@RequestParam 6)@ModelAttribute

2.Spring-mvc框架结构及执行流程

Spring mvc架构及执行流程一、请求处理流程图 二、执行流程说明 三、组件说明

说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc 的三大组件。 需要用户编写的组件有handler、view 四、Spring MVC配置 1、组件扫描器:使用组件扫描器省去在spring容器配置每个controller类,使用 自动扫描标记@controller的配置如下:

2、RequestMappingHandlerMapping:注解处理器映射器,对类中标记@RequestMapping 的方法进行映射,根据RequestMapping定义的url匹配RequestMapping标记的方 法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装 注解描述: @RequestMapping:定义请求url到处理器功能方法的映射 3、RequestMappingHandlerAdapter:注解式处理器适配器,对标记@RequestMapping 的方法进行适配。 从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用 4、:spring mvc 使用自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在spring-mvc.xml 配置文件总使用替代注解处理器和适配器的配置。 5、视图解析器 InternalResourceViewResolver:支持JSP视图解析 viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl 的相关jar 包。此属性可以不设置,默认为JstlView。 prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:

Java Spring各种依赖注入注解的区别

Spring对于Bean的依赖注入,支持多种注解方式: 直观上看起来,@Autowired是Spring提供的注解,其他几个都是JDK本身内建的注解,Spring 对这些注解也进行了支持。但是使用起来这三者到底有什么区别呢?笔者经过方法的测试,发现一些有意思的特性。 区别总结如下: 一、@Autowired有个required属性,可以配置为false,这种情况下如果没有找到对应的bean 是不会抛异常的。@Inject和@Resource没有提供对应的配置,所以必须找到否则会抛异常。 二、@Autowired和@Inject基本是一样的,因为两者都是使用AutowiredAnnotationBeanPostProcessor来处理依赖注入。但是@Resource是个例外,它使用的是CommonAnnotationBeanPostProcessor来处理依赖注入。当然,两者都是BeanPostProcessor。

TIPS Qualified name VS Bean name 在Spring设计中,Qualified name并不等同于Bean name,后者必须是唯一的,但是前者类似于tag或者group的作用,对特定的bean进行分类。可以达到getByTag(group)的效果。对于XML配置的bean,可以通过id属性指定bean name(如果没有指定,默认使用类名首字母小写),通过标签指定qualifier name: 如果是通过注解方式,那么可以通过@Qualifier注解指定qualifier name,通过@Named或者@Component(@Service,@Repository等)的value值指定bean name:

spring MVC配置详解

牧涛 --<-<-<@态度决定一切→_→。。。 ?博客园 ?首页 ?新闻 ?新随笔 ?联系 ?管理 ?订阅 随笔- 171 文章- 3 评论- 79 spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。 一、Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib -nodep-2.1_3.jar Hibernate 3.6.8:hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、a ntlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.G A.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.4.jar、相应数据库的驱动jar 包 SpringMVC是一个基于DispatcherServlet(分发器)的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请求给相应的Handler,Handler处理以后再返回相应的视图(View)和模型(Model),返回的视图和模型都可以不指定,即可以只返回Model或只返回View或都不返回。 DispatcherServlet是继承自HttpServlet的,既然SpringMVC是基于DispatcherSe rvlet的,那么我们先来配置一下DispatcherServlet,好让它能够管理我们希望它管理的内容。HttpServlet是在web.xml文件中声明的。 spring org.springframework.web.servlet.DispatcherServlet< /servlet-class>