声明:本博文参考了一些博主的博文,这里表示抱歉。自己也稍微整理一下,供自己学习记录,如有错误请大佬们指正,谢谢!作者:借我丹青妙笔
1. @Controller、@RestController、@Service、 @Repository
@Controller: 用于标识处理器类,作用于控制层(controller层)。它注解的类进行前端请求的处理,转发,重定向。包括调用Service层的方法。
@RestController: 相当于@ResponseBody + @Controller合在一起的作用,与@Controller相比我更常用@RestController一些。
@Service: 作用于业务逻辑层(service层)。
@Repository: 作用于持久层(dao层)。
@RequestMapping:请求到处理器功能方法的映射规则,可定义到类和方法。常用参数:value、method 。可将@RequestMapping标签定义到类名处或方法名处窄化路径。该注解有六个属性:
1、 value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
2、 consumes,produces;(不常用)
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、 params,headers;(不常用)
params: 指定request中必须包含某些参数值是,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
当@RequestMapping("/list")只带有一个参数,参数默认为value。相当于
@RequestMapping(value = "/list")。
此时我们访问下面代码中的list()方法的路径为:localhost:8080/项目名/teacher/list
@RestController
@RequestMapping("/teacher")
public class TeacherController {
@Resource
private ITeacherService teacherService;
@RequestMapping("/list")
public Map<String,Object> list(Teacher teacher){
Map<String,Object> map = new HashMap<>();
List<Teacher> teachers = teacherService.listTeacher(teacher);
map.put("msg","查询成功");
map.put("code",0);
map.put("data",teachers);
return map;
}
}
Spring 4.3 引入了方法级注解的变体,也被叫做 @RequestMapping
的组合注解。组合注解可以更好的表达被注解方法的语义。它们所扮演的角色就是针对 @RequestMapping
的封装,而且成了定义端点的标准方法。
例如,@GetMapping
是一个组合注解,它所扮演的是 @RequestMapping(method =RequestMethod.GET)
的一个快捷方式。
方法级别的注解变体有如下几个:
@GetMapping (常用于查询方法)
@PostMapping (常用于增加方法)
@PutMapping (常用于修改方法)
@DeleteMapping (常用于删除方法)
@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
2. @Autowired和@Resource的区别
@Resource:是用来实现依赖注入的,此注解是byName
自动注入的,属于Spring的注解 org.springframework.beans.factory.annotation.Autowired
@Autowired:也是用来实现依赖注入的,但是此注解是byType
自动注入的,不属于Spring的注解,JDK1.6支持的注解。javax.annotation.Resource
共同点:
- spring都支持
- 都作用在字段和setter方法上
不同点:
- @Resource属于Spring的注解,@Autowired是JDK1.6支持的注解
- @Resource不允许找不到bean的情况,而Autowired允许(@Autowired(required = false))
-
@Resource默认通过name查找,而@Autowired默认通过type查找
总结:@Autowired自动注解,一个类,俩个实现类,Autowired就不知道注入哪一个实
现类,而@Resource有name属性,可以区分。(推荐使用@Resource,但如果每个接口只对应一个实现类就无所谓用哪一个)。