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. webapi 给自己挖的坑

    这次做项目,负责开发web api. 自己给自己挖了个坑.在所有的api接口前面都加上一个static . 结果检查路由配置.代码等等都找不到问题所在. 最后在一个同事的提醒下,原来是static给惹 ...

  2. Nginx负载均衡与转发

    1.6种负载均衡策略 1.轮询 :默认方式 2.weight : 权重方式 3.ip_hash :依据ip分配方式 4.least_conn :最少连接方式 5.fair(第三方) :响应时间方式 6 ...

  3. runtime和runloop问答

    Runtime 01 问题: objc在向一个对象发送消息时,发生了什么? 解答: 根据对象的 isa 指针找到类对象 id,在查询类对象里面的 methodLists 方法函数列表,如果没有在好到, ...

  4. 从零开始搭建系统2.5——Apollo安装及配置

    参见https://github.com/ctripcorp/apollo/wiki/Quick-Start安装即可

  5. drop,delete与truncate的区别

    drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句. (1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将 ...

  6. Tools: windbg 使用指南

    windbg使用 符号表C:\Symbols; SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols 系统变量_NT_SYMBOL_PAT ...

  7. 每天进步一点点-WPF-根据数据类型加载控件

    目的,根据数据类型的不同,动态的加载适用于不同数据类型的控件(布局) 原理:为自定义的数据类型添加数据魔板,绑定的时候绑定这些数据类型的实例. 例子: 数据类型: 数据模板: <DataTemp ...

  8. Java语法清单-快速回顾(开发)

    Java CheatSheet 01.基础 hello,world! public static void main(String[] args) { System.out.println(" ...

  9. vue wabpack 切换开发环境 和生成环境 的接口地址

    /config/dev.env.js 新增一行 var merge = require('webpack-merge') var prodEnv = require('./prod.env') mod ...

  10. 其它课程中的python---3、numpy总结(非常全)

    其它课程中的python---3.numpy总结(非常全) 一.总结 一句话总结: 学习方式应该是:听课+总结:-->找总结博客+再总结 需要始终记住:凭借,继承,复用 1.numpy的主要功能 ...