SpringBoot核心注解
SpringBoot通过注解方式大大简化了Spring的大量配置文件,但是在使用注解的时候还是会有误区,那么下面就来归纳总结一下:
一、启动类 Application
1)@SpringBootApplication
SpringBoot启动类,让spring boot自动给程序进行必要的配置。
等同于:@Configuration + @EnableAutoConfiguration + @ComponentScan组合。
二、控制器类 Controller
2)@RestController
等同于:@Controller+@ResponseBody组合,返回JSON、XML或自定义mediaType内容 到页面。使用@RestController无法返回JSP、HTML页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
① @Controller: 控制层,用于返回页面(JSP、HTML)。
在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping
② @ResponseBody:将Controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body去,通常用来返回JSON或者XML,
3)@Autowired
自动注入,对类成员变量、方法及构造函数进行标注,完成自动装配的工作;当加上(required=false)时,就算找不到bean也不报错。
4)@PostMapping、@GetMapping
Ⅰ、@PostMapping: 请求会从body部分拿到数据,用户不会看到传输数据;
它是@RequestMapping(method = RequestMethod.POST)的缩写。
Ⅱ、@GetMapping: 直接从URL获得数据,类似www.xxx.com/?id=1形式传输;
它是@RequestMapping(method = RequestMethod.GET)的缩写。
Get与Post请求的区别?
① Get提交的数据通过URL传递,Post请求不会显示在地址栏;
② Get请求传输的数据有限制,Post请求没有限制;
③ Post请求的安全性高于Get,因为Get请求提交数据会暴露在URL中;
④ Get会被浏览器缓存,Post不存在缓存;
5)@RequestMapping
这是用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。可直接:@RequestMapping("/xxxx/xx")。
该注解有六个属性:
① value:指定请求的实际地址,地址可以是URI Template 模式 method:指定请求的method类型
② params:指定request中必须包含某些参数值是,才让该方法处理。
③ headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
④ GET、POST、PUT、DELETE等
⑤ consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
⑥ produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
6)@ResponseBody
表示该方法的返回结果直接写入HTTP Response Body中,一般在异步获取数据时使用,可直接返回Json数据。该注解一般会配合@RequestMapping一起使用,如果不加@ResponseBody返回值通常解析为跳转路径。
注:如果控制器类使用@RestController,则方法上不需要加@ResponseBody。
7)@RequestBody
用来接收前端传递给后端的Json字符串中的数据的(请求体中的数据的),放在参数前;使用@RequestBody接收数据时,必须用POST方式提交数据,不能使用GET方式提交。
在后端的同一个接收方法里,@RequestBody与@RequestParam可以同时使用,@RequestBody最多只能有一个,而@RequestParam可以有多个。
三、业务层 Service
8)@Service
标注业务层组件,用在业务层实现类上(ServiceImpl结尾的类)。
可以直接使用@Service(默认别名就是当前类名),也可以@Service("/xxx")或@Service(value = “/xxx”)。
四、数据访问层 JdbcDao
9)@Repository
用于数据访问层(持久层),即DAO组件;(JdbcDao结尾的类)
10)@Resource
默认按 byName自动注入,可以注入数据库资源。如:@Resource(name=“xxx”)。
@Autowired和@Resource的联系与区别?
联系:都可以用来装配bean,作用一致。
区别:①@Autowired按byType自动注入,而@Resource默认按 byName自动注入;
②@Resource有两个重要属性,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
11)@Component:
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注;
12)@ComponentScan
表示将该类自动发现扫描组件。如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
13)@Configuration
指出该类是 Bean 配置的信息源,相当于XML中的,一般加在主类上;
14)@Bean
相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。
15)@EnableAutoConfiguration
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上;