文章目录
Spring常用注解包括了SpringMVC的注解,SpringMVC是Spring的子项目
声明bean的注解
@Controller 标注控制层组件
@Service 标注业务层组件
@Respostory 标注数据访问组件
@Component 标注@Controller、@Service、@Respostory以外的其他组件
注入Bean的注解
@Autowired 按类型注入,注入的属性必须提供set方法
注意:@Resource按名称注入,属于J2EE范畴,不属于Spring框架,@Autowired属于Spring框架
@Qualifier 与@Autowired配合使用
接口或父类可能存在多个实现类或子类的实例,因此通过@Qualifier来指定名称的实例注入
配置类的相关注解
@Configuration 注解在类上,声明当前类为配置类,相当于xml中<beans>标签
@Bean 注解在方法上,声明当前方法的返回值是一个由Spring管理的Bean,在类spring加载的时 候就会创建该Bean,相当于xml中bean标签中配置的单个bean对象
单元测试注解
@RunWith:指定Spring集成单元测试的运行环境
@ContextConfiguration:指定Spring的配置文件路径
时间格式的转换注解
@DateTimeFormat 前台传往后台的时间进行转换
注意:后台传往前台的时间进行转换用@JsonFormat,非spring注解,需要导入Jackson的jar包
SpringMVC注解
-
@Controller:标识Controller控制器,SpringMVC扫包时才会创建控制器组件
-
@ControllerAdvice:声明全局异常处理类
@ControllerAdvice声明的全局异常处理类中,处理异常的方法均使用@ExceptionHandler进行注解
通过@ControllerAdvice注解实现异常处理的作用:全局异常处理,减少代码入侵
-
@ExceptionHandler:声明异常处理方法
- @ExceptionHandler注解的处理异常的方法中可以加入Exception类型的形参,执行时会自动注入异常对象
- @ExceptionHandler注解的处理异常的方法可以不在@ControllerAdvice声明的全局异常处理类中,而在出现异常的类中
- @ControllerAdvice和@ExceptionHandler只能处理 Controller 层未捕获(往外抛)的异常,对应拦截器的异常无法无法处理
- 如果当前Controller类中的方法出现异常,会优先使用当前Controller类中的@ExceptionHandler标记的异常处理方法,当前Controller类中找不到方法时,才会去全局异常处理类中找异常处理方法。即便全局异常处理的异常类型与当前异常对象类型更匹配,也会优先使用局部的【就近原则】
-
@RequestHeader 获取请求头中指定属性的值
-
@PathVariable:映射URL中占位符参数绑定到Controller处理方法的参数
-
@ModelAttribute 用于打了注解@RequestMapping的方法或参数上
- 当@ModelAttribute注解在方法上,此方法会在每一个@RequestMapping标注的方法执行之前执行,如果有返回值,则自动将该返回值加入到ModelMap中。如果@ModelAttribute没有指定value属性,则modelMap中key为类型名(首字符小写即可);如果指定了@ModelAttribute指定value属性,则modelMap中key为value属性指定值
- 当注解在参数时,当请求数据的编码格式为 application/x-www-form-urlencoded时,将请求参数赋值给Controller控制器中方法的形参,通过指定value属性值与方法的形参进行绑定
- @ModelAttribute的value属性值与调用方法的形参名不一致时,可以在调用方法的形参前也加注解@ModelAttribute(value=“属性名”),指定注入数据给指定形参
-
@RequestParam 当请求数据的编码格式为 application/x-www-form-urlencoded时,将请求参数赋值给Controller控制器中方法的形参
-
@RequestBody 当请求数据的编码格式为 application/json、application/xml等非 application/x-www-form-urlencoded类型时,获取请求体中的数据。当请求数据的编码格式为application/x-www-form-urlencoded时,@RequestBody 也可以处理
注意:当请求数据的编码格式为multipart/form-data时,@RequestBody 无法处理
-
@RequestMapping:用在类和方法上,用于处理请求地址的映射,常用属性value【映射地址】、method【请求方法】、params【请求参数】、heads【请求头】
- @ResponseBody:注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
AOP切面相关注解
- 切面【Aspect】:切点和通知组成
- 连接点【JoinPoint】:程序执行过程中明确的点,如方法前、方法后
- 切点【PointCut】:并不是所有的连接点都要切一刀,带有通知的连接点叫做切点
- 通知、增强【Advice】:想要在切点处实现的功能
@Aspect 声明当前类是一个切面,类中定义了切点和通知
@PointCut 声明切点
五种通知
@PointCut(“表达式”) 定义切点,注解的属性中配置切点位置
@Before 前置通知,该注解标识的通知在切点之前执行
@AfterReturning 后置通知,该注解标识的通知在切点之后执行
@AfterThrowing 异常通知
@After 最终通知 无论方法是否执行都会执行
@Autowired 与@Resource的区别:
-
@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上
-
@Autowired是spring的注解,@Resource是J2EE的注解
-
@Autowired默认按类型注入Bean。
- 注入的Bean对象必须存在,如果允许为null,可设置required属性为false
- @Autowired要想按名称注入,必须与@Qualifier搭配使用
@Resource默认按名称装配Bean
@Autowired和@Qulifiler注解
-
@Resource有两个常用属性:name和type。不配置属性时,默认按变量名称注入
- @Resource装配顺序
- 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
- 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
- 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
- 如果没有指定name属性和Type属性,默认按注解所在字段的变量名进行注入,找不到再按类型注入
- @Autowired默认按类型进行匹配。如果发现找到多个同类型的Bean,则报异常。
- 默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,默认required为true即不能为null
- 如果想按名称注入,则可以结合@Qualifier注解进行使用@Qualifier(value=“名称”)
//接口或父类可能存在多个实现类或子类的实例,因此通过@Qualifier来指定名称的实例注入 @Autowired @Qualifier("userServiceImpl") public IUserService userService; //指定接口只能注入某个实现类
- @Resource装配顺序
@RequestParam
@RequestParam有四个属性:name属性、value属性、required属性、defaultValue属性,
- required属性:@RequestParam配置的前端参数是否一定要传,默认为true,必须传该参数
- name属性、value属性的作用一样
- defaultValue属性:设置参数默认值,如果设置了默认值,则required属性自动变为false,此时如果前端不传参,则使用设置的默认值
//常用于前端传参和后端不一致的情况,@RequestParam注解可以自动进行转化
@RequestMapping("/test")
public String test(@RequestParam(value = "name") String username){
System.out.println("username");
return "success";
}
@RequestParam接收的是key-value里面的参数,get请求和post请求均可
@RequestBody
@RequestBody 接收的是请求体里面的数据,只能用于post请求,因为get请求的参数在请求头中
Post提交的数据为json格式时,注解@RequestBody 会自动封装到对象中
@RequestMapping("/rb")
public Dept test1(@RequestBody Dept dept){
return dept;
}
@PathVariable
@RequestMapping("/del/{id}")
public void delete(@PathVariable Long id){
iDeptService.deleteByPrimaryKey(id);
}
@ResponseBody
@RequestMapping("findAll")
@ResponseBody
public List<TEmployee> findAll() {
return employeeService.findAll();
}
- @ResponseBody 表示该方法的返回结果直接写入HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】
- @RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。
@RequestHeader
@RequestHeader用于获取请求头中属性的值,但get请求在请求头中传递的参数无法获取
@RequestMapping("/rh")
public void test2(@RequestHeader(value="Accept-Encoding") String str){
System.out.println(str);
}
@RequestMapping
@RequestMapping注解常用属性value、method、params、headers
//method属性:指定请求方式
@RequestMapping(value = "/test",method = RequestMethod.POST)
public String test(@RequestParam(value = "name",defaultValue = "go") String username){
System.out.println(username);
return "success";
}
//指定参数需要满足的条件:params = {"name", "id!=1", "id=2"}必须包含名为name的参数,id必须不等于1,必须等于2
@RequestMapping(value = "/rh", params = {
"name", "id!=1", "id=2"})
public void test2(Dept dept) {
System.out.println(dept);
}
今天的文章Spring常用注解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/4660.html