Spring中注解大全

@Controller

标识一个该类是Spring MVC controller 处理器,用来创建处理http请求的对象

@Controller
public class TestController{@RequestMapping("test")public String test(Map<String,Object> map){return "hello";}
}

@RestController

Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@RestController,默认返回json格式。

@RestController
public class TestController{@RequestMapping("/test")public String test(Map<String,Object> map){return "hello";}
}

@Service

用于标注业务层组件,说白了就是加入你有一个用注解的方式把这个类注入到spring配置中

@Autowired

用来装配bean,都可以写在字段上,或者方法上。

默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)

@RequestMapping

类定义处:提供初步的请求映射信息,相对于WEB应用的根目录。

方法处:提供进一步的细分映射信息,相对于类定义处的URL。

@RequestParam

用于将请求参数区数据映射到功能处理方法的参数上

public Resp test(@RequestParam Integer id){return Resp.success(customerInfoService.fetch(id));
}

这个id就是要接收从接口传递过来的参数id的值的,如果传递过来的参数名和接收的不一致,也可以如下

public Resp test(@RequestParam(value="course_id") Integer id){return Resp.success(customerInfoService.fetch(id));
}

其中course_id就是接口传递的参数,id即使映射course_id的参数名

@ModelAttribute

1、标记在方法上

标记在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中。

A、在有返回的方法上:

当ModelAttribute设置了value,方法返回的值会以这个value为key,以参数接受到的值作为value,存入到Model中,如下面的方法执行之后,最终相当于model.addAttribute(“user_name”,name);假如

@model.addAtrribute没有自定义value,则相当于model.addAttribute(“name",name);

@ModelAttribute(value="user_name")
public String before2(@RequestParam(required = false) String name,Model model){System.out.println("进入了2," + name);return name;
}

B、在没返回的方法上:

需要手动model.add方法

@ModelAttribute
public void before(@RequestParam(required = false) Integer age, Model model){model.addAttribute("age",age);System.out.println("进入了1:" + age);
}

我们在当前类下建一个请求方法:

@RequestMapping(value = "/mod")
public Resp mod(@RequestParam(required = false) String name;@RequestParam(required = false) Integer age;Model model){System.out.println("进入mod");System.out.println("参数接受的数值{name="+name+";age="+age+"}");System.out.println("model传过来的值:" + model);return Resp.success("1");}
)

在浏览器中输入访问地址并且加上参数:

http://localhost:8080/api/test/mod?name = 我是哈哈 & age = 12

最终输出

进入了1::40
进入了2:我是哈哈
进入mod
参数接受的数值(name = 我是哈哈, age = 18)
model传来的值:{age = 40, user_name = 我是哈哈 }

2、标记在方法的参数上

标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用。我们在上面的类中加入一个方法如下

@RequestMapping(value="/mod2")
public Resp mod2(@ModelAttribute("user_name") String user_name,@ModelAttribute("name") String name,@ModelAttribute("age") Integer age, Model model){System.out.println("进入mod2");System.out.println("user_name:" + user_name);System.out.println("name:" + name);System.out.println("age:" + age);System.out.println("model:" + model);return Resp.success("1");}

在浏览器中输入访问地址并且加上参数:

http://localhost:8080/api/test/mod2?name = 我是哈哈 & age = 12

最终输出

进入了1:40
进入了2:我是哈哈
进入了mod2
user_name:我是哈哈
name:我是哈哈
age:40
model:{user_name = 我是哈哈,org.springframework.validation.BindingResult.user_name=org.springframework.validation.BeanPropertyBindingResult: 0 errors, name=我是小菜, org.springframework.validation.BindingResult.name=org.springframework.validation.BeanPropertyBindingResult: 0 errors, age=40, org.springframework.validation.BindingResult.age=org.springframework.validation.BeanPropertyBindingResult: 0 errors}}

从结果可以看出,用在方法参数中的@ModelAttribute注解,实际上是一种接受参数并且自动放入Model对象中,便于使用。

@Cacheable

用来标记缓存查询。可用用于方法或者类中

当标记在一个方法上时表示该方法是支持缓存的,

当标记在一个类上时则表示该类所有的方法都是支持缓存的。

比如@Cacheable(value=“UserCache”) 标识的是当调用了标记了这个注解的方法时,逻辑默认加上从缓存中获取结果的逻辑,如果缓存中没有数据,则执行用户编写查询逻辑,查询成功之后,同时将结果放入缓存中。

但凡说到缓存,都是key-value的形式的,因此key就是方法中的参数(id),value就是查询的结果,而命名空间UserCache是在spring*.xml中定义.

@Cacheable(value="UserCache")// 使用了一个缓存名叫 accountCache
public Account getUserAge(int id) {  //这里不用写缓存的逻辑,直接按正常业务逻辑走即可,//缓存通过切面自动切入  int age=getUser(id);   return age;
}

@CacheEvict

用来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存。@CacheEvict(value=”UserCache”)

@Resource

@Resource的作用相当于@Autowired

只不过@Autowired按byType自动注入,

而@Resource默认按 byName自动注入罢了。

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

@Resource装配顺序:

  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

@PostConstruct

用来标记是在项目启动的时候执行这个方法。用来修饰一个非静态的void()方法

也就是spring容器启动时就执行,多用于一些全局配置、数据字典之类的加载

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执行

@PreDestroy

被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前

@Repository

用于标注数据访问组件,即DAO组件

@Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

@Scope

用来配置 spring bean 的作用域,它标识 bean 的作用域。

默认值是单例

  1. singleton:单例模式,全局有且仅有一个实例
  2. prototype:原型模式,每次获取Bean的时候会有一个新的实例
  3. request:request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
  4. session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
  5. global session:只在portal应用中有用,给每一个 global http session 新建一个Bean实例。

@SessionAttributes

默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中

参数:

  1. names:这是一个字符串数组。里面应写需要存储到session中数据的名称。

  2. types:根据指定参数的类型,将模型中对应类型的参数存储到session中

  3. value:和names是一样的。

    @Controller@SessionAttributes(value={"names"},types={Integer.class})public class ScopeService {@RequestMapping("/testSession")public String test(Map<String,Object> map){map.put("names", Arrays.asList("a","b","c"));map.put("age", 12);return "hello";}}
    

    @Required

    适用于bean属性setter方法,并表示受影响的bean属性必须在XML配置文件在配置时进行填充。否则,容器会抛出一个BeanInitializationException异常。

    @Qualifier

    当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。

Spring中注解大全相关推荐

  1. Spring中注解大全和应用

    点击上方△蓝字关注我们 带你征服编程和泡妞两座大山 @Controller @RestController: @Service @Autowired @RequestMapping @RequestP ...

  2. JavaWeb-Spring中注解大全与详解

    常用的spring注解有如下几种: @Controller @Service @Autowired @RequestMapping @RequestParam @ModelAttribute @Cac ...

  3. Spring Boot 注解大全,一键收藏了!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 Sp ...

  4. Spring Boot注解大全,一键收藏了!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:www.cnblogs.com/tanwei81/p/681 ...

  5. Spring Boot 注解大全,一键收藏!回城路上复习!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | www.cnblogs.com/tanwei8 ...

  6. spring中注解的通俗解释

    我们在没有用注解写spring配置文件的时候,会在spring配置文件中定义Dao层的bean,这样我们在service层中,写setDao方法,就可以直接通过接口调用Dao层,用了注解写法后,在配置 ...

  7. Spring中注解注入bean和配置文件注入bean

    注解的方式确实比手动写xml文件注入要方便快捷很多,省去了很多不必要的时间去写xml文件 按以往要注入bean的时候,需要去配置一个xml,当然也可以直接扫描包体,用xml注入bean有以下方法: 1 ...

  8. Spring Boot 注解大全

    使用注解的优势: 采用纯java代码,不在需要配置繁杂的xml文件 在配置中也可享受面向对象带来的好处 类型安全对重构可以提供良好的支持 减少复杂配置文件的同时亦能享受到springIoC容器提供的功 ...

  9. spring中注解无法修饰静态变量

    背景:使用@value注解为类的静态属性赋值的时候,发现一直是空.为什么会这样呢? Spring 依赖注入 是依赖 set方法,set方法是 是普通的对象方法,也就是类实例化的时候才会赋值,但是sta ...

最新文章

  1. 系列文章--AJAX技术系列总结
  2. python的库在哪_你知道python常见的库有哪些吗?五大python库
  3. 1074 Reversing Linked List (25 分)【难度: 一般 / 知识点: 链表】
  4. 用python让excel飞起来 pdf_电脑卡?用u盘制作一个提速工具飞起来
  5. html5时间画布走动,javascript+HTML5 canvas绘制时钟功能示例
  6. flask和vue的冲突问题
  7. DVWA Cross Site Request Forgery (CSRF) -------WP
  8. 胡润百富:华为成为中国最值钱消费电子企业 小米排名第二
  9. minnet sample
  10. mysql索引之六:mysql高效索引之覆盖索引
  11. 谷歌眼镜设计规范之度量和网格
  12. linux5分钟打印一次的脚本,centos7中crontab定时计划任务5分钟一次命令写法
  13. 7个Python实战项目代码,让你感受下大神是如何起飞的!
  14. Mysql成语数据库_成语文化文摘索引数据库
  15. NATAPP内网穿透
  16. 关掉magiskhide_[讨论] Magisk隐藏root的实现
  17. 图形的装饰教案计算机,《有趣的图形》中班教案
  18. ziheng -接小球游戏
  19. 微信小程序实现下载功能(以下载视频为例)
  20. LeetCode1-580题汇总,希望对你有点帮助!

热门文章

  1. LeetCode 281. 锯齿迭代器(map+vector)
  2. LeetCode 390. 消除游戏(类似约瑟夫环,找映射规律)
  3. LeetCode 1042. 不邻接植花(图的数据结构)
  4. 数据库实例:用户登录
  5. 塔菲克蓝牙适配器驱动_小身材,大功能,biaze毕亚兹USB蓝牙适配器开箱体验
  6. dlib 怎么安装vs2017_win10中的dlib库安装过程
  7. 五个同事想计算他们的平均工资,但公司不让吐露薪资,如何实现?
  8. 恕我直言,很多小样本学习的工作就是不切实际的
  9. 剑桥大学终身教授T.S.:7大机器学习算法与应用案例
  10. redis笔记_源码_双端链表list