1.@Controller

注解到类名上,表示该类是控制器。

2.@RequestMapping("/xxxx")

可以放在类名/方法名之上,表示访问请求该方法时的映射url。如果该方法类名有@RequestMapping,则访问该方法的url=项目名+类的RequestMapping+方法的RequestMapping。

3.@Resource

作用相当于@Autowired,只不过@Autowired按类型自动注入,而@Resource默认按byName注入。

@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。

如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

举例:如果Spring上下文中存在不止一个UserDao的bean时,就会抛出BeanCreationException异常;

如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。

我们可以使用@Qualifier配合@Autowired来解决。

①存在多个bean时,这样解决。

@Autowired

@Qualifier("userServiceImpl")

public IUserService userService;

②不存在时这样解决。

@Autowired(required = false)

public IUserService userService

4.@Service

@Service("Bean的名称")  其中双引号内为可选操作,可以不填,填了代表自定义业务名。整体含义为定义业务层bean。

@Service用在实现类的类名上。如

@Service("alarmManageService")

public class AlarmServiceImp implements AlarmManageService{}

5.@Repository

@Repository("Bean的名称")

定义DAO层Bean

6.@Component

定义Bean, 不好归类时使用。即除了常用的归类外,此Bean不属于其中任何一个,即可用Component修饰。

7.@InitBinder

用于绑定数据,比如前端页面有两个对象,一个student,一个course,切他俩的属性名都一样,此时即可使用该注解。

使用该注解对WebDataBinder 对象进行初始化,只对当前的Controller有效

@Controller

@RequestMapping("/classtest")

public class TestController {

// 绑定变量名字和属性,参数封装进类

@InitBinder("student")

public void initBinderUser(WebDataBinder binder) {

binder.setFieldDefaultPrefix("student.");

}

// 绑定变量名字和属性,参数封装进类

@InitBinder("course")

public void initBinderAddr(WebDataBinder binder) {

binder.setFieldDefaultPrefix("course.");

}

@RequestMapping("/methodtest")

@ResponseBody

public Map<String,Object> test(@ModelAttribute("student") Student student,@ModelAttribute("course") Course course){

Map<String,Object> map=new HashMap<String,Object>();

map.put("student", student);

map.put("course", course);

return map;

}

对日期类型进行转换

@InitBinder

public void InitBinder(WebDataBinder binder){

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

CustomDateEditor dateEditor = new CustomDateEditor(df, true);

binder.registerCustomEditor(Date.class,dateEditor);

}

}

8.前端小知识。jquery使用ajax时,可以设置同步或异步执行  async: true为异步  async: false是同步。

9.加入aop,可以用作日志相关。

(1).pom.xml引包

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aop</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>1.9.2</version>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.9.3</version>

</dependency>

(2).springmvc.xml配置

<!--配置cglib代理 -->

<aop:aspectj-autoproxy proxy-target-class="true" />

(3).创建自定义注解

import java.lang.annotation.Documented;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target({ ElementType.PARAMETER, ElementType.METHOD })

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface SystemLog {

String method() default "";// 方法名

String flag() default "";// 预留标识

String describe() default "";// 操作描述

String type() default "";// 操作类型(如设备,证书,用户)

}

其中SystemLog内的方法是用作注解内的参数,如flag,type可让切面内容更加丰富。

(4).在需要进行切面的函数上添加如下注解

@SystemLog(method = <方法名>, flag = <自定义标识符>, describe = <自定义描述>, type = <自定义类型>)

(5).配置切面函数。首先创建一个类,例如 test ,然后创建一个函数,如qiemian。在qiemian函数进行如下配置。

@Pointcut("@annotation(<SystemLog自定义注解类全路径,如com.test.SystemLog>)")

public void test() {

}

(6).添加后置或前置或环绕等切面通知,例如:

@AfterReturning(value = "test()", returning = "result")

public Object doAfterReturning(JoinPoint joinPoint, Object result) {

}

注意,returning = "result"的result一定要和Object result这个参数的参数名一致。

如果需要获取request,可用如下方法:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

10.HTTPHeader

10.突然报错

Description Resource Path Location Type
Cannot change version of project facet Dynamic Web Module to 2.5. JBFEducation line 1 Maven Java EE Configuration Problem

解决方式:打开当前项目目录,进入.setting文件夹,修改org.eclipse.wst.common.project.facet.core.xml 中的为   <installed facet="jst.web" version="2.5"/> 即可。

11.常见http错误码

  302 redirect: 302 代表暂时性转移(Temporarily Moved )。
  意思就是访问网址A,但是网址A因为服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B。

springmvc常用知识总结,不定期更新的更多相关文章

  1. AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)

    AngularJS常用知识汇总(不断更新中....) 注:请点击此处进行充电! app.controller('editCtrl',['$http','$location','$rootScope', ...

  2. 【linux入门必备】小白需要掌握的基础知识_不定期更新

    因为博主对linux掌握暂时不需要太精通,遇到一个记录一个. 零碎 知识点: 杂类常用命令: 模糊匹配补齐 TAB 系统相关命令: 查阅手册 man 更新软件 sudo apt-get update ...

  3. python常用模块(不定期更新)

    前言: 随着python开发项目越来越大,显然应该把不同功能的代码放到不同的.py文件里,每一个.py文件叫一个模块:模块分为(1)内置标准模块(2)第三方模块(3)自定义模块 这三种.这篇博客就是用 ...

  4. Java常用知识(长期更新)

    1.0转义符 \n:换行 ,\n的作用和print后面的ln相同,可酌情使用 \t:一个制表位(一系列空格) 例: public class Schedule{ public static void ...

  5. PHP常用函数总结(不定期更新)

    array_merge函数和两个数组相加的区别 array_merge函数,在出现相同的索引数组,会把两个数组中的索引数组,进行融合,以第一个数组的索引最大值往后相加,如果是关联数组,后面数组的值覆盖 ...

  6. Javascript常用函数收集(不定期更新)

    str.replace('/正则表达式/','替换内容'); //正则替换str.match('/正则表达式/','替换内容'); //正则匹配 str.indexOf('查找代码'); //查找是否 ...

  7. C#学习笔记-基础知识篇(不定期更新)

    1.父类必须包含构造函数么? 父类必须要有一个构造函数,有参无参都可以. 构造函数是对象的基本,没有构造函数就没有对象,若父类中显示的有参数的构造函数,在子类继承就必须写一个构造函数来调用父类的构造函 ...

  8. 个人常用eclipse快捷键,不定期更新

    ctrl+f11 ==> runctrl+h ==> 全文检索main+enter ==>public static void main(String[] args) { } alt ...

  9. 不定期更新的IDEA功能整理

    目录 不定期更新的IDEA功能整理 idea 命令 Preferences 和 Project Structure Keymap HTTP Proxy Postfix Completion 插件 插件 ...

随机推荐

  1. 简单介绍Collection框架的结构

    Collection:List列表,Set集 Map:Hashtable,HashMap,TreeMap Collection  是单列集合 List   元素是有序的.可重复 有序的 collect ...

  2. POJ 1265 Area (Pick定理 & 多边形面积)

    题目链接:POJ 1265 Problem Description Being well known for its highly innovative products, Merck would d ...

  3. 前端通过url页面传值

    例子:从A页面将‘myId’传到B页面 1.A页面传值 var url = encodeURI("html/editPostcard.html?myId="+ myId); win ...

  4. 【Java多线程系列随笔二】BlockingQueue

    前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便 ...

  5. linux模范配置文件格式

    模范配置文件 #--------------------------------------------------------------------- # Global settings #--- ...

  6. java oop第11章_反射、BaseDao的进一步改造

      引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一.       Class类: Class类用 ...

  7. 驾驶心率和呼吸,疲劳检测系统,通过安全带,坐垫等内置sensor

    HARKEN - Heart and respiration in car embedded nonintrusive sensors 2 https://www.youtube.com/watch? ...

  8. ajax 工作原理

    Ajax的优缺点及工作原理? 定义和用法: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).Ajax 是一种用于创建快速动态网 ...

  9. Django 查漏补缺

    Django 查漏补缺 Django  内容回顾: 一. Http 请求本质: 网络传输,运用socket Django程序: socket 服务端 a. 服务端监听IP和端口 b. 浏览器发送请求 ...

  10. Django -- 分页 -- 批量导入

    Django --  分页 分页 Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中 Paginator对象 Paginator(列表,int):返 ...