Spring常用注解 以及 SpringBoot常用注解
既然提到了这个概念, 那就从Spring先说起. SpringBoot就是封装后的Spring, 相对于Spring, Boot省去了很多配置, 也是很好的解决了Spring的"配置地狱"的缺点
Spring的常用注解
注入
| 注解 |
说明 |
| @Controller |
标注一个控制器组件类 |
| @Service |
标注一个业务层O组件类 |
| @Repository |
标注一个DAO组件类 |
| @Component |
标注一个普通的Spring Bean类 |
以上四个本质上属于同一类注解, 用法相同 / 功能相
| 注解 |
说明 |
| @Autowired |
⽤于为类的属性、构造器、⽅法进⾏注值 |
| @Resource |
它并不属于spring的注解,⽽是来⾃于JSR-250。其默认情况下按照bean的名称进⾏注⼊,当找不到匹配项时会按照类型装 |
| @Value |
从properties⽂件中的取值赋给修饰的字段 |
| @Primary |
⾃动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为⾸选者,否则将抛出异常 |
| @Lazy |
⽤于注解类,延迟初始化。 |
| @Named |
和@Component功能相同。@Named可以有值,如果没有值⽣成的Bean名称默认和类名相同 |
@Autowired:⽤于为类的属性、构造器、⽅法进⾏注值
默认情况下,其依赖的对象必须存在(bean可⽤),如果需要改变这种默认⽅式,可以设置其required属性为false。默认按类型装配,如果我们想使⽤按名称装配,可以结合@Qualifier注解⼀起使⽤。如:
@Autowired@Qualifier("BeanName") ,存在多个实例时使⽤
| 注解 |
说明 |
| @Configuration |
把⼀个类作为⼀个IoC容器,它的某个⽅法头上如果注册了@Bean,就会作为这个Spring容器中的Bean |
Scope
@Scope注解是 Spring IOC 容器中的一个作用域,在 Spring IOC 容器中,他用来配置Bean实例的作用域对象。@Scope 具有以下几种作用域:
用法: @Scope("singleton") 也是默认
| 作用域 |
说明 |
| singleton |
单实例的(单例)(默认) ----全局有且仅有一个实例 |
| prototype |
多实例的(多例) ---- 每次获取Bean的时候会有一个新的实例 |
| reqeust |
同一次请求 ----request:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效 |
| session |
同一个会话级别 ---- session:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效 |
MVC
| 注解 |
说明 |
| @RequestMapping |
是⼀个⽤来处理请求地址映射的注解,可⽤于类或⽅法上。⽤于类上,表⽰类中的所有响应请求的⽅法都是以该地址作为⽗路径 |
| @RequestParam |
⽤于绑定request请求参数到指定的⽅法 |
| @PathVariable |
⽤于⽅法修饰⽅法参数,会将修饰的⽅法参数变为可供使⽤的uri变量(可⽤于动态绑定) |
| @RequestHeader,@CookieValue |
处理request header部分的注解 |
| @RequestParam |
作⽤是提取和解析请求中的参数。@RequestParam⽀持类型转换,类型转换⽬前⽀持所有的基本Java |
| @RequestBody |
有个默认属性required,默认是true,当body⾥没内容时抛异常 |
| @SessionAttributes |
即将值放到session作用域中, 写在class上面 |
| @ModelAttribute |
将数据添加到模型对象中,用于视图页面展示时使用。 |
| @ResponseBody |
放在controller上, 返回数据不再是网页, 而是JSON(或xml) |
| @RestController |
@ResponseBody+@Controller的合体 |
| @ResponseStatus |
修饰类或方法, 返回前端, 一般为状态码(404 或 500) |
aop
| 注解 |
说明 |
| @Aspect |
标明该类为切⾯类,并启⽤AspectJ注解,注:在使⽤时要同@Component⼀起使⽤,否则不会被扫描到加⼊容器 |
| @Pointcut |
定义切⼊点 |
| @Before |
定义前置通知,在⽬标⽅法执⾏前执⾏ |
| @After |
定义后置通知,在⽬标⽅法执⾏后执⾏,不论是⽬标⽅法执⾏正常后退出,还是抛出异常后退出,均会被执⾏ |
| @Around |
定义环绕通知,在⽬标⽅法执⾏前后嵌⼊相关业务逻辑 |
| @AfterReturning |
⽬标⽅法执⾏正常退出后执⾏ |
| @AfterThrowing |
⽬标⽅法执⾏抛出异常后执⾏ |
注:@Aspect、@Pointcut、@Before、@Around、@After、@AfterReturning、@AfterThrowing属于spring aop模块
| 注解 |
说明 |
| @PostConstruct |
在构造⽅法和init⽅法(如果有的话)之间得到调⽤,且只会执⾏⼀次。 |
| @PreDestory |
注解的⽅法在destory()⽅法调⽤后得到执⾏ |
| @Transactional |
在处理dao层或service层的事务操作时,譬如删除失败时的回滚操作,可⽤到@Transactional注解 |
| @ControllerAdvice |
控制器异常处理 |
| @ExceptionHandler |
Controller中有方法加此注解, 那其他方法中没有捕获的异常就会以参数的形式传入添加此注解的方法上 |
SpringBoot注解
Spring的注解SpringBoot肯定能使得啦, 但是还是添加了一些新注解的啦
启动类
| 注解 |
说明 |
| @SpringBootApplication |
SpringBoot项目的启动类 |
翻看源码, 发现 此注解 包含以下三个注解
| 注解 |
说明 |
| @SpringBootConfiguration |
作用与@Configuration作用相同, 声明此类为配置类 |
| @EnableAutoConfiguration |
是SpringBoot实现自动化配置的核心注解, 通过这个注解把Spring应用所需的bean注入容器中 |
| @ComponentScan |
动态确定扫描范围, 默认情况下, 它扫描所有类型, 并且扫描范围是此注解所在配置类包及子包的类 |
MVC
| 注解 |
说明 |
| @GetMapping |
相当于@RequestMapping(method=RequestMethod.GET) |
| @PostMapping |
相当于@RequestMapping(method=RequestMethod.POST) |
| @PutMapping |
相当于@RequestMapping(method=RequestMethod.PUT) |
| @DeleteMapping |
相当于@RequestMapping(method=RequestMethod.DELETE) |
| @PatchMapping |
相当于@RequestMapping(method=RequestMethod.PATCH) |
测试
| 注解 |
说明 |
| @RunWith(SpringRunner.class) |
RunWith就是一个运行容器, @RunWith(JUnit4.class)就是指用JUnit4来运行 |
| @SpringBootTest |
SpringBoot用于测试的注解, 可指定启动类或者测试环境 |