电子说
基于 SpringBoot 平台开发的项目数不胜数,与常规的基于Spring
开发的项目最大的不同之处,SpringBoot 里面提供了大量的注解用于快速开发,而且非常简单,基本可以做到开箱即用!
那 SpringBoot 为开发者提供了多少注解呢?我们该如何使用?
针对此问题,小编特意对其进行了一番整理,内容如下,个人感觉还是比较清晰的,今天我们就一起来整一整每个注解的含义和用法,以免踩坑!
@Controller
通常用于修饰controller
层的组件,由控制器负责将用户发来的URL
请求转发到对应的服务接口,通常还需要配合注解@RequestMapping
使用。
@RequestMapping
提供路由信息,负责URL
到Controller
中具体函数的映射,当用于方法上时,可以指定请求协议,比如GET
、POST
、PUT
、DELETE
等等。
@RequestBody
表示请求体的Content-Type
必须为application/json
格式的数据,接收到数据之后会自动将数据绑定到Java
对象上去
@ResponseBody
表示该方法的返回结果直接写入HTTP response body
中,返回数据的格式为application/json
比如,请求参数为json
格式,返回参数也为json
格式,示例代码如下:
/**
* 登录服务
*/
@Controller
@RequestMapping("api")
public class LoginController {
/**
* 登录请求,post请求协议,请求参数数据格式为json
* @param request
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity login(@RequestBody UserLoginDTO request){
//...业务处理
return new ResponseEntity(HttpStatus.OK);
}
}
@RestController
和@Controller
一样,用于标注控制层组件,不同的地方在于:它是@ResponseBody
和@Controller
的合集,也就是说,在当@RestController
用在类上时,表示当前类里面所有对外暴露的接口方法,返回数据的格式都为application/json
,示范代码如下:
@RestController
@RequestMapping("api")
public class LoginController {
/**
* 登录请求,post请求协议,请求参数数据格式为json
* @param request
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
public ResponseEntity login(@RequestBody UserLoginDTO request){
//...业务处理
return new ResponseEntity(HttpStatus.OK);
}
}
@RequestParam
用于接收请求参数为表单类型的数据,通常用在方法的参数前面,示范代码如下:
/**
* 登录请求,post请求协议,请求参数数据格式为表单
*/
@RequestMapping(value = "login", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity login(@RequestParam(value = "userName",required = true) String userName,
@RequestParam(value = "userPwd",required = true) String userPwd){
//...业务处理
return new ResponseEntity(HttpStatus.OK);
}
@PathVariable
用于获取请求路径中的参数,通常用于restful
风格的api
上,示范代码如下:
/**
* restful风格的参数请求
* @param id
*/
@RequestMapping(value = "queryProduct/{id}", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity queryProduct(@PathVariable("id") String id){
//...业务处理
return new ResponseEntity(HttpStatus.OK);
}
@GetMapping
除了@RequestMapping
可以指定请求方式之外,还有一些其他的注解,可以用于标注接口路径请求,比如GetMapping
用在方法上时,表示只支持get
请求方法,等价于@RequestMapping(value="/get",method=RequestMethod.GET)
@GetMapping("get")
public ResponseEntity get(){
return new ResponseEntity(HttpStatus.OK);
}
@PostMapping
用在方法上,表示只支持post
方式的请求。
@PostMapping("post")
public ResponseEntity post(){
return new ResponseEntity(HttpStatus.OK);
}
@PutMapping
用在方法上,表示只支持put
方式的请求,通常表示更新某些资源的意思
@PutMapping("put")
public ResponseEntity put(){
return new ResponseEntity(HttpStatus.OK);
}
@DeleteMapping
用在方法上,表示只支持delete
方式的请求,通常表示删除某些资源的意思
@DeleteMapping("delete")
public ResponseEntity delete(){
return new ResponseEntity(HttpStatus.OK);
}
@Service
通常用于修饰service
层的组件,声明一个对象,会将类对象实例化并注入到bean
容器里面
@Service
public class DeptService {
//具体的方法
}
@Component
泛指组件,当组件不好归类的时候,可以使用这个注解进行标注,功能类似于于@Service
@Component
public class DeptService {
//具体的方法
}
@Repository
通常用于修饰dao
层的组件,
@Repository
注解属于Spring
里面最先引入的一批注解,它用于将数据访问层 (DAO
层 ) 的类标识为Spring Bean
,具体只需将该注解标注在 DAO类上即可,示例代码如下:
@Repository
public interface RoleRepository extends JpaRepository<Role,Long> {
//具体的方法
}
为什么现在使用的很少呢?
主要是因为当我们配置服务启动自动扫描dao
层包时,Spring
会自动帮我们创建一个实现类,然后注入到bean
容器里面。当某些类无法被扫描到时,我们可以显式的在数据持久类上标注@Repository
注解,Spring
会自动帮我们声明对象。
@Bean
相当于 xml 中配置 Bean,意思是产生一个 bean 对象,并交给spring管理,示例代码如下:
@Configuration
public class AppConfig {
//相当于 xml 中配置 Bean
@Bean
public Uploader initFileUploader() {
return new FileUploader();
}
}
@Autowired
自动导入依赖的bean
对象,默认时按照byType
方式导入对象,而且导入的对象必须存在,当需要导入的对象并不存在时,我们可以通过配置required = false
来关闭强制验证。
@Autowired
private DeptService deptService;
@Resource
也是自动导入依赖的bean
对象, 由JDK
提供 ,默认是按照byName
方式导入依赖的对象;而@Autowired
默认时按照byType
方式导入对象,当然@Resource
还可以配置成通过byType
方式导入对象。
/**
* 通过名称导入(默认通过名称导入依赖对象)
*/
@Resource(name = "deptService")
private DeptService deptService;
/**
* 通过类型导入
*/
@Resource(type = RoleRepository.class)
private DeptService deptService;
@Qualifier
当有多个同一类型的bean
时,使用@Autowired
导入会报错,提示当前对象并不是唯一,Spring
不知道导入哪个依赖,这个时候,我们可以使用@Qualifier
进行更细粒度的控制,选择其中一个候选者,一般于@Autowired
搭配使用,示例如下:
@Autowired
@Qualifier("deptService")
private DeptService deptService;
@Scope
用于生命一个spring bean
的作用域,作用的范围一共有以下几种:
/**
* 单例对象
*/
@RestController
@Scope("singleton")
public class HelloController {
}
全部0条评论
快来发表一下你的评论吧 !