spring mvc 注解

从Spring 2.5 开始提供了完全基于注释配置 Bean、装配 Bean 的功能。我们可以使用基于注释的 Spring IoC 替换原来基于 XML 的配置。以前做项目使用的是xml配置来实现的,这几天在做一个小项目,使用了springmvc的注解,跟大家分享一下。

使用注解

Spring 2.5 提供了 AutowiredAnnotationBeanPostProcessor、

CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor 和 RequiredAnnotationBeanPostProcessor 这四个主要的关于 Annotation 的 BeanPostProcessor。

我们可以使用 <context:annotation-config /> 来方便地、一次性的声明者四个 BeanPostProcessor。

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

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

3.Persistence... 用于 JPA 的 PersistenceUnit 和PersistenceContext 注释

4.Required... 用于检查被 Required 注释标记的属性是否被设定。

原来我们配置xml

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

package com.baobaotao; public class Office {
    private String officeNo =”001”;     //省略 get/setter     @Override
    public String toString() {
        return "officeNo:" + officeNo;     }
} 
public class Car {     private String brand;     private double price;     // 省略 get/setter     @Override
    public String toString() {
        return "brand:" + brand + "," + "price:" + price;     
} }
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.

<?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-2.5.xsd">     
<bean id="boss" class="com.baobaotao.Boss">         
<property name="car" ref="car"/>         
<property name="office" ref="office" />     
</bean>
<bean id="office" class="com.baobaotao.Office">         
<property name="officeNo" value="002"/>     
</bean>
<bean id="car" class="com.baobaotao.Car" scope="singleton">         
<property name="brand" value=" 红旗 CA72"/>         
<property name="price" value="2000"/>     
</bean> 
</beans>

使用@autowired

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

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。

让@Autowired工作起来

<?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-2.5.xsd">
    <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->
    <bean class="org.springframework.beans.factory.annotation.         
AutowiredAnnotationBeanPostProcessor"/>    
 <!-- 移除 boss Bean 的属性注入配置的信息 -->     
<bean id="boss" class="com.baobaotao.Boss"/>
<bean id="office" class="com.baobaotao.Office">         
<property name="officeNo" value="001"/>     
</bean>
    <bean id="car" class="com.baobaotao.Car" scope="singleton">         
<property name="brand" value=" 红旗 CA72"/>         
<property name="price" value="2000"/>     
</bean> 
</beans> 

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

按照上面的配置,Spring 将直接采用 Java 反射机制对 Boss 中的 car 和 office 这两个私有成员变量进行自动注入。

注释配置相对于 XML 配置的对比

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

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

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

具体问题具体分析

总结:以上的对比是理论上的对比,做项目实践后认识到,每个项目到底xml配置还是使用注解来配置,跟项目的大小,需求有莫大的关系,不是“一句注解比XML简单”就要使用的,还是需要具体问题具体分析的。



时间: 2024-10-06 13:34:07

spring mvc 注解的相关文章

Spring MVC注解的一些案列

1.  spring MVC-annotation(注解)的配置文件ApplicationContext.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&quo

spring mvc(注解)上传文件的简单例子

spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 关于文件上传的配置不能少 大家可以看具体代码如下: web.xml &

Spring MVC注解配置结合Hibernate的入门教程及其代码实例

原文:Spring MVC注解配置结合Hibernate的入门教程及其代码实例 源代码下载地址:http://www.zuidaima.com/share/1787210045197312.htm 1.概述 本文旨在搭建Spring MVC+Hibernate开发框架,通过一个简单的demo讲解Spring MVC的相关配置文件,以及通过注解方式实现简单功能. 开发框架:Spring+Spring MVC+Hibernate(Spring所用的版本为3.0.5). 数据库:MySQL(数据库名称

spring mvc 注解入门示例

web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/ja

spring mvc 注解@Controller @RequestMapping @Resource的详细例子

现在主流的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.comm

spring mvc 注解示例

springmvc.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" xmlns:mvc="http://www.springframewo

[转]spring mvc注解方式实现向导式跳转页面

由于项目需要用到向导式的跳转页面效果,本项目又是用spring mvc实现的,刚开始想到用spring 的webflow,不过webflow太过笨重,对于我们不是很复杂的跳转来说好像有种“杀鸡焉用牛刀”的感觉,于是就网上搜索看有没有类似的解决方案,网上的答案一般都是叫你继承AbstractWizardFormContoller这个类来实现,但对于spring mvc3.0.x这个类将不再使用,转而推荐使用注解的方式来实现,于是参考官方文档,用注解方式实现了向导式页面. 下面是代码示例: [jav

Spring mvc注解说明

编号 注解 说明 位置 备注 1 @Controller 将类变成Spring Bean 类 现阶段 @Controller . @Service 以及 @Repository 和 @Component 注解的作用是等价的 2 @RequestMapping 请求映射 类.方法 标注在类上意指类实现 Controller 接口 标注在方法上意指扩展 Spring 预定义 Controller ( 如:SimpleFormController) 3 @RequestParam 入参绑定 URL 入

Spring mvc注解式开发入门

java类 package com.cloud.po; import Java.util.Date; public class Items { private Integer id; private String name; private Float price; private String pic; private Date createtime; private String detail; public Integer getId() { returnid; } public void

Spring MVC 注解[转]

[学习笔记]基于注解的spring3.0.x MVC学习笔记(九) 摘要: 本章节,仅为@SessionAttributes的功能扩展介绍介绍,结合@requestparam注解进行简易无数据库分页. 之前介绍了@SessionAttributes的功能,他可以保存指定的值在modelnap中,不会因为request提交后则消失,我们利用这个特性,可以利用SessionAttributes注解进行简易的分页. 代码如下: 1: public class testservi...阅读全文 post