`

用注解方式实现springMVC

 
阅读更多

    以前总是在弄Struts+Spring+jdbc、Ibatis实现MVC,最近公司项目换Spring mvc实现方式,从网络上找了一个项目来练手,现在总结一下,mvc无非就是分清M V C 各自功能,而web程序无非就是要解决web容器数据和java程序数据传输问题(就程序开发而言)。如果你理解MVC, 对SSH有基本的了解,学习Spring MVC 就可以套用SSH的基本实现。 在struts中使用 ActionServlet作为请求分发器,依据请求路径信息将请求分派到各个action中,调用基本数据CURD方法。在SSH中,ActionServlet作为Control , JSP/HTML作为View承担着视图功能,Action作为mode和struts的“适配器”,将请求数据转发给后端的DAO处理。在依据处理结果,跳转到对应的View,其中ActionMapping是对View的抽象。 有了这个基本认识,我们类比类推,spring mvc,在spring mvc中比较重要的两个包就是spring-web.jar spring-context.jar、基本的ioc等jar包。 org.springframework.web.servlet.DispatcherServlet作为Control ,它做的事和ActionServlet差不多。JSP/HTML作为View,在spring最大的亮点莫过于和mode、dao交互的类可以是普通的JAVABEAN,在struts中的action到了spring 中就完全变成了POJO。和Struts2 的Aciton一样,减少了数据侵入性。下面我们就用注解实现Spring mvc。

我们用注解方式实现spring  mvc,下面我们要对基本的产使用的注解有个基本的理解,注解的存在使得我们可以减少spirng的xml配置,做的事情和xml配置差不多。所以我们需要的注解就包括三大类:

    * bean 属性注入注解,例如 @Autowired 、@Resource

    * bean方法执行注解,例如 @PostConstruct 、@PreDesotory

    * bean 定义注解,例如@Component  、 @Control 、@Service 、 @Repository等。

 

 

@Autowired、@Resource作为常使用的属性注入注解,区别在于:

1、@Autowired  是依据type来自动封装注入的;而@Resource 先按照name,在按照type依赖注入

2、扫描处理注解的处理类不同,要让@Autowired 生效,必须在spring xml配置文件中加入

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

 而要让@Resource 生效,必须在spring xml配置文件中加入

<context:annotation-config />

通过<context:annotation-config /> 将隐式的向容器注入AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor这4个BeanPostProcessor。 

 

使用Autowired当IOC中拥有两个相同目标类型时候,可以使用@Qualifier指定具体使用那个类,下面代码指定id为userDao的类注入进来:

 

@Autowired
@Qualifier("userDao")
private  UserDao userdao; 

 当IOC容器找不到 Autowired指定的类型时,可以通过如下方式配置,这样就需要在代码中做null判断:

@Autowired(required= false)
public void setUserDao(UserDao userDao){
	this.userDao = userDao;
}

 

@PostConstruct 、 @PreDestory 用于定义方法在对象是实例化后执行的方法、和在对象销废之前调用的方法。

  例如子类需要实例化父类的变量,就可以再对应的方法中添加@PostConstruct、某些类在内存中销废之前需要释放自己的资源可以使用@PreDestory注解

 

@Component 、 @Control 、 @Service 、 @Repository 用于向IOC容器中注入bean:

 

@Component
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
	...
}

 

 如上代码会在ioc容器中声明id名称为userDaoImpl的bean,如果指定了名称,如@Component("userDao"),那就会在ico容器中声明id为userDao的bean,没有添加参数默认使用的就是非限定类名的骆驼命名法方式定义bean。其他@Control、@Service、@Repository和@Component的作用一样,但他们更加答意,表示控制层、业务层、持久层。

 

要让上述bean定义注解生效需要在spring配置文件中添加如下xml配置:

 

 <context:component-scan base-package="com.kedacom.ksoa" />

 这个处理类会将包下所有添加了注解的类实例化并且注入到IOC。加入类中添加了@Resource、@Autowired等属性注入注解,该类也会一并处理,不需要在添加<context: annocation-config />配置了。base-page表示需要扫描的包,base-package指定的类包及其递归子包中所有的类都会被处理。 

 

<context:component-scan />还允许定义过滤器将基包下的某些类纳入或排除。Spring支持以下4种类型的过滤方式: 

  • 过滤器类型 表达式范例 说明
  • 注解 org.example.SomeAnnotation 将所有使用SomeAnnotation注解的类过滤出来
  • 类名指定 org.example.SomeClass 过滤指定的类
  • 正则表达式 com\.kedacom\.spring\.annotation\.web\..* 通过正则表达式过滤一些类
  • AspectJ表达式 org.example..*Service+ 通过AspectJ表达式过滤一些类

值得注意的是<context:component-scan />配置项不但启用了对类包进行扫描以实施注释驱动Bean定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor),因此当使用<context:component-scan />后,就可以将<context:annotation-config />移除了。 


 使用@Scope来定义Bean的作用范围 
在使用XML定义Bean时,我们可能还需要通过bean的scope属性来定义一个Bean的作用范围,我们同样可以通过@Scope注解来完成这项工作:

 

@Scope("session")
@Component()
public class UserSessionBean implements Serializable {
	...
}

 

 

3. 参考 
http://kingtai168.iteye.com/blog/244002 
http://www.iteye.com/topic/244153 
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-annotation-config 
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-classpath-scanning 




 

分享到:
评论

相关推荐

    非注解Springmvc+spring+hibernate 入门实例

    虽然现在的最佳实践倾向于使用注解和Spring Boot,但理解非注解方式有助于深入学习这些框架的工作原理,对提升开发技能有长远的帮助。在实践中,你可能会遇到如何处理异常、如何进行事务管理、如何优化查询性能等...

    SPRINGMVC 注解范例程序

    通过这些注解,开发者可以快速创建和配置 Web 应用,实现请求-响应的处理流程,大大简化了传统的 XML 配置方式。在实际项目中,配合 Spring Boot 和 Spring Data JPA 等技术,可以构建出高效、简洁的现代 Web 应用。

    springmvc+jdbctemplate+mysql(采用注解方式)

    例如,一个简单的JdbcTemplate查询可能使用`@Repository`注解的类,其中的方法用`@Query`注解来执行SQL语句。 **MySQL** MySQL是一款广泛使用的开源关系型数据库管理系统。它的特点是速度快、稳定性好且易于使用。...

    SpringMVC的代码简单实现

    以上代码示例展示了如何使用元注解和反射技术实现SpringMVC的核心功能。这只是一个简化的版本,实际的SpringMVC框架还包括了模型绑定、参数解析、异常处理、视图渲染等更多复杂功能。但这个例子足以让我们理解...

    SpringMvc+Spring+Mybatis+Maven+注解方式=整合

    "SpringMvc+Spring+Mybatis+Maven+注解方式"是一个经典的Java后端技术栈,它整合了四个关键组件,为开发人员提供了强大的工具和框架支持。下面将详细讲解这四个组件及其整合方式。 1. **Spring Framework**: ...

    SpringMVC+Mybatis 注解方式实现的一个增删改查的例子

    使用 SpringMVC + Mybatis 框架整合,基于 Spring 注解方式实现了对用户表数据的增、删、改、查、分页的功能, 省去了 Spring 繁琐的 bean 手工配置。里面附带表结构及说明文档。

    springmvc实现demo

    在本项目"springmvc实现demo"中,我们将探讨如何使用 Spring MVC 实现Web应用,包括注解和非注解两种方式,并且数据库环境为 MySQL。 1. **Spring MVC 架构** Spring MVC 提供了一个分层架构,主要包括 ...

    Redis 与SpringMVC 基于注解方式 集成

    本文将深入探讨如何在SpringMVC项目中,通过注解方式集成Redis,以实现高效的数据交互。 首先,我们需要在项目中引入Redis的相关依赖。这通常通过在`pom.xml`文件中添加Spring Data Redis和Jedis客户端库的Maven...

    springmvc3+spring+mybatis3整合项目 注解实现

    这个整合项目是基于Spring 3.0.5、Spring MVC 3和MyBatis 3.0.2版本,采用注解方式进行配置,简化了XML配置文件,提高了开发效率。 Spring MVC是Spring框架的一部分,主要负责Web请求的处理。在本项目中,通过注解...

    Spring2.5_基于注解驱动的SpringMVC

    ### Spring2.5_基于注解驱动的SpringMVC #### 概述 Spring框架作为Java企业级开发中广泛使用的框架之一,自Spring2.0以来就对其MVC框架进行了重大的升级,到了Spring2.5版本更是引入了注解驱动的功能。这意味着...

    SpringMVC纯注解配置

    在这个主题中,我们将深入探讨如何利用注解实现SpringMVC的配置以及jQuery如何处理后台返回的JSON对象。 首先,让我们关注SpringMVC中的注解配置。在传统的SpringMVC应用中,我们需要在`web.xml`中声明...

    SpringMVC注册功能的实现.docx

    在 SpringMVC 框架中,我们可以使用 `@RequestMapping` 注解来映射注册请求,并使用 `ModelAndView` 对象来返回成功页面。 3.2 注册失败 在注册失败的情况下,我们需要显示错误信息,以便用户了解注册失败的原因。...

    SpringMVC+MyBatis+MySql注解示例

    4. **配置MyBatis**:编写MyBatis的全局配置文件`mybatis-config.xml`,并定义Mapper接口和Mapper XML文件,使用注解或者XML配置SQL。 5. **数据库配置**:设置MySQL的连接信息,如URL、用户名、密码等。 6. **启动...

    注解的springMVC介绍

    控制器通常通过注解的方式进行配置,例如使用`@Controller`和`@RequestMapping`等注解。 示例代码: ```java @Controller @RequestMapping("/blog") public class BlogController { @RequestMapping("/index") ...

    基于Netty手工实现springMVC框架

    本话题将探讨如何基于Netty来手工实现SpringMVC框架的关键组件。 首先,让我们回顾一下SpringMVC的基本组成部分:DispatcherServlet、Controller、Model、View和ViewResolver。这些组件协同工作,处理HTTP请求,并...

    springMVC学习——注解方式

    在这个"springMVC学习——注解方式"的主题中,我们将深入探讨如何使用注解来简化SpringMVC的配置和开发流程。 首先,让我们了解一下什么是注解。在Java中,注解是一种元数据,允许程序员在源代码中嵌入信息,这些...

    SpringMVC四种映射方式实例代码

    本实例代码着重讲解了SpringMVC中的四种映射方式以及拦截器的实现,这对于理解和掌握SpringMVC的请求处理机制至关重要。 1. **四种映射方式**: - **通配符映射**:`@RequestMapping("/path/*")`,星号(*)代表任意...

    netty整合SpringMVC实现下载

    - Controller:处理业务逻辑,通常是一个实现了 Controller 接口或带有 @Controller 注解的类。 - HandlerMapping:映射请求到处理器。 - ViewResolver:解析视图,将处理结果呈现给用户。 3. **整合步骤**: -...

    springmvc框架的用户登录注册的简单实现

    在本例中,"springmvc框架的用户登录注册的简单实现"提供了一个初学者友好的教程,帮助学习者了解如何使用 Spring MVC 实现基本的用户登录和注册功能。 首先,我们来了解一下 MVC 设计模式。MVC 将应用程序分为三个...

Global site tag (gtag.js) - Google Analytics