Spring常用注解

Spring常用注解Spring常用注解包括了SpringMVC的注解,SpringMVC是Spring的子项目声明bean的注解@Controller标注控制层组件@Service标注业务层组件@Respostory标注数据访问组件@Component标注@Controller、@Service、@Respostory以外的其他组件注入Bean的注解…


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:声明异常处理方法

    1. @ExceptionHandler注解的处理异常的方法中可以加入Exception类型的形参,执行时会自动注入异常对象
    2. @ExceptionHandler注解的处理异常的方法可以不在@ControllerAdvice声明的全局异常处理类中,而在出现异常的类中
    3. @ControllerAdvice和@ExceptionHandler只能处理 Controller 层未捕获(往外抛)的异常,对应拦截器的异常无法无法处理
    4. 如果当前Controller类中的方法出现异常,会优先使用当前Controller类中的@ExceptionHandler标记的异常处理方法,当前Controller类中找不到方法时,才会去全局异常处理类中找异常处理方法。即便全局异常处理的异常类型与当前异常对象类型更匹配,也会优先使用局部的【就近原则】

  • @RequestHeader 获取请求头中指定属性的值

  • @PathVariable:映射URL中占位符参数绑定到Controller处理方法的参数

  • @ModelAttribute 用于打了注解@RequestMapping的方法或参数上

    1. 当@ModelAttribute注解在方法上,此方法会在每一个@RequestMapping标注的方法执行之前执行,如果有返回值,则自动将该返回值加入到ModelMap中。如果@ModelAttribute没有指定value属性,则modelMap中key为类型名(首字符小写即可);如果指定了@ModelAttribute指定value属性,则modelMap中key为value属性指定值
    2. 当注解在参数时,当请求数据的编码格式为 application/x-www-form-urlencoded时,将请求参数赋值给Controller控制器中方法的形参,通过指定value属性值与方法的形参进行绑定
    3. @ModelAttribute的value属性值与调用方法的形参名不一致时,可以在调用方法的形参前也加注解@ModelAttribute(value=“属性名”),指定注入数据给指定形参
  • @RequestParam 当请求数据的编码格式为 application/x-www-form-urlencoded时,将请求参数赋值给Controller控制器中方法的形参

  • @RequestBody 当请求数据的编码格式为 application/jsonapplication/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。

    1. 注入的Bean对象必须存在,如果允许为null,可设置required属性为false
    2. @Autowired要想按名称注入,必须与@Qualifier搭配使用

    @Resource默认按名称装配Bean

    @Autowired和@Qulifiler注解

  • @Resource有两个常用属性:name和type。不配置属性时,默认按变量名称注入

    • @Resource装配顺序
      1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
      2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
      3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
      4. 如果没有指定name属性和Type属性,默认按注解所在字段的变量名进行注入,找不到再按类型注入
    • @Autowired默认按类型进行匹配。如果发现找到多个同类型的Bean,则报异常。
      • 默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,默认required为true即不能为null
      • 如果想按名称注入,则可以结合@Qualifier注解进行使用@Qualifier(value=“名称”)
    //接口或父类可能存在多个实现类或子类的实例,因此通过@Qualifier来指定名称的实例注入
    @Autowired   
    @Qualifier("userServiceImpl")   
    public IUserService userService;   //指定接口只能注入某个实现类
    

@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常用注解分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/4660.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注