Springboot笔记<10>常用注解总结
Springboot常用注解总结
• 项目配置注解
1、@SpringBootApplication 注解
@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。
这三个注解的作用分别为:
- @SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
- @EnableAutoConfiguration:是自动配置的注解。
- @ComponentScan:扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。
2、@Configuration:一般声明配置类,使用@Component或者@Configuration
3、@Bean:Bean对象注册Spring IOC容器与使用bean对象是整个Spring框架的重点,其中@Bean就是一个将方法作为Spring Bean对象注册的一种方式。
4、@Scope:****声明Spring Bean**的作用域@Scope("singleton")
Spring Bean的5种作用域:
- singleton 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。
- prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。
- request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。
- session 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。
- application 限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。
• controller 层注解
1、****@Controller 表明这个类是一个控制器类,和@RequestMapping来配合使用拦截请求,如果不在method中注明请求的方式,默认是拦截get和post请求。这样请求会完成后转向一个视图解析器。因为前后端会做分离,所以请求后端只关注数据处理,后端返回json数据的话,需要配合@ResponseBody注解来完成。
@RestController 是@Controller 和@ResponseBody的结合,一个类被加上@RestController 注解,数据接口中就不再需要添加@ResponseBody。更加简洁。同样的情况,@RequestMapping(value="",method= RequestMethod.GET ),我们都需要明确请求方式。这样的写法又会显得比较繁琐,于是乎就有了如下的几个注解。
@RequestMapping(value=“”,method = RequestMethod.GET) @GetMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.POST) @PostMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.PUT) @PutMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.DELETE) @DeleteMapping(value =“”)
2、@CrossOrigin: **@CrossOrigin(origins = "", maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个controller配置启用跨域,也可以在方法级别启用。
3、@Autowired: spring的自动装配,这个个注解可以用到构造器,变量域,方法,注解类型上。当我们需要从bean 工厂中获取一个bean时,Spring会自动为我们装配该bean中标记为@Autowired的元素。
4、@Resource:****@Resource和@Autowired一样都可以用来装配bean,都可以标注字段上,或者方法上。 @resource注解不是spring提供的,是属于J2EE规范的注解。@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配。**
**5、@EnablCaching:****@EnableCaching: 这个注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。其作用相当于spring配置文件中的cache manager标签。
前后端传值@ParhVariable和@RequestParam
params:指定request中必须包含某些参数值是,才让该方法处理。
@RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10"})
public String testParamsAndHeaders() {
System.out.println(``"testParamsAndHeaders");
return "SUCCESS";
}
params 只是判断url 或者 form data 中的参数是否复合params的定义,并不会直接绑定数据到方法的参数中!
@PathVariable:路径变量注解。绑定路径中的占位符参数到方法参数变量中;只能绑定路径中的占位符参数,且路径中必须有参数。
无论是 GET 或者POST 只要 URL中有参数即可!
【注意】如果URL中无参数,将会出错;如果URL有参数,但是没有使用@PathVariabl该注解,那么URL的参数不会默认与方法参数绑定!方法里的参数会默认绑定表单里面对应的参数!
@RequestParam: 该注解相关属性如下:
value
:参数key,可以不写,默认为"";name
:和value作用一样;required
:默认值为true,可以不写;- 获取URL或者 form data 中的参数
【注意】GET中的参数形式为:username=tom&age=11&sex=boy;POST中的参数形式为:以键值对形式保存在form data
@RequestBody: 用于读取Request请求的body部分,且Content-Type为application/json格式数据,接收到数据后会自动将数据绑定在Java对象上,系统会使用HttpMessageConverter来讲请求的body中的json字符串转换为Java对象
@RequestMapping("/getUserById/{name}")
public User getUser(@PathVariable("name") String userName){
return userService.selectUser(userName);
}
@GetMapping("/users/{userId}/teachers")
public List<Teacher> getUserRelatedTeachers(@PathVariable("userId") Long userId,@RequestParam(value = "type",required = false) String type){
...
}
• servcie层注解
1、@Service:这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给spring容器。事务的切面也会配置在这一层。
• DAO层注解
1、@Repository:@Repository注解类作为DAO对象,管理操作数据库的对象。
总得来看,@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。通过这些注解的分层管理,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。所以我们在正常开发中,如果能用@Service, @Controller, @Repository其中一个标注这个类的定位的时候,就不要用@Component来标注。
• 配置文件注解
dog: keji
my-profile:
name: xiaoming
email: 11111@163.com
library:
location: hubei
books:
- name: honglou
description: honglou
- name: sanguo
description: sanguo
@Value:首先是使用@Value("${property}")读取简单的配置信息
@Value("${dog}")
String dog;
@ConfigurationProperties: 我们同样可以通过@ConfigurationProperties读取配置信息并与bean绑定
@Component
@ConfigurationProperties(prefix = "library")
class LibraryProperties{
@NotEmpty
private String location;
private List<Book> books;
@Data
@ToString
static class Book{
String name;
String description;
}
}
• 异常处理注解
@ControllerAdvice :实现全局异常处理,只需要定义类。
使用这个 Controller ,可实现三个方面的功能,因为这是SpringMVC提供的功能,所以可以在springboot中直接使用:
- 全局异常处理 (@ExceptionHandler)
- 属性编辑器 (@InitBinder)
- 全局数据 (@ModelAttribute)
@ExceptionHandler:针对哪一种异常进行处理
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView customException(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("message",e.getMessage());
mv.setViewName("error");
return mv;
}
}
在该类中可以定义多个异常处理方法,不同方法处理不同的异常,例如空指针、数据越界、非法参数异常等;@ExceptionHandler 注解用来指明异常的处理类型,即如果这里指定为 NullpointerException,则数组越界异常就不会进到这个方法中来。
@ModelAttribute: 全局数据
全局数据绑定功能可以用来做一些初始化的数据操作,可以将一些公共数据定义在添加了 @ControllerAdvice 注解的类中,从而在每一个 Controller 的接口中,就都能够访问导致这些数据,定义如下:
@ControllerAdvice
public class GlobalExceptionHandler1{
@ModelAttribute(name = "keji")
public Map<String,Object> data(){
HashMap<String, Object> map = new HashMap<>();
map.put("age", 18);
map.put("sex", "男");
return map;
}
}
使用 @ModelAttribute 注解标记该方法的返回数据是一个全局数据,默认情况下全局数据的 key 就是返回的变量名,value 就是方法返回值,开发者可以通过 @ModelAttribute 注解的 name 属性去重新指定 key
• 事务注解
数据库事务(transaction
)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。springboot中只需要在方法上加上@Transactional
注解,该方法即可成为一个事务。
未经作者同意请勿转载
本文来自博客园作者:aixueforever,原文链接:https://www.cnblogs.com/aslanvon/p/15770104.html