来公司实习几天了,今天开始熟悉业务代码,之前对于Spring等了解比较粗略,所以有些注解都一知半解的,这里记录下方便自己后续查询:
网上找了个比较全的博客,大多数的注解都总结到了,传送门:接近8000字的Spring/SpringBoot常用注解总结!安排!
下面就原博没有或者个人原因需要重点标记的内容进行阐述:
1. @Slf4j
用作日志输出,如果不加该注解,则一般会在项目每个类的开头加入下面代码:
private final Logger logger = LoggerFactory.getLogger(当前类名.class);
如果直接用注解@Slf4j就可以省略这句代码,变得更简洁。当然,使用该注解的前提是要安装好Lombok插件。
2.@Component
是spring中的一个注解,它的作用就是实现bean的注入。他与@Repository
, @Service
, @Controller作用类似,但是后面
这些注解会具备有更多的功能,而且功能各异。区别可见下表:
注解 | 含义 |
---|---|
@Component | 最普通的组件,可以被注入到spring容器进行管理 |
@Repository | 作用于持久层(Dao) |
@Service | 作用于业务逻辑层 |
@Controller | 作用于表现层(spring-mvc的注解) |
3. @Resource
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,是J2EE的,需要导入,但是Spring支持该注解的注入。@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。(byType和byName的区别可以见这篇文章 Spring中的byName与byType)。
@Resource和@Autowired的具体区别,可以看下这篇文章 @Resource与@Autowired用法区别
那到底什么情况下该有哪个:
1.当注入的属性是接口
1.1在接口只有一个实现类的时候,@Resource和@Autowire 在功能上是没有区别的
1.2如果接口有多个实现类,在写法上,@Autowire还需要搭配@Qualifier或者@Primary,而@Resource不需要,自身属性即可满足
2.在使用@Autowire时,Idea会出现提示,强迫症看着很不舒服
spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
spring团队推荐用构造函数来注入Bean。
所以,基于以上,可以选择看起来和写起来都比较简单的@Resource注解(公司也是用这个)
4. @RequestBody
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
具体看这篇博客:@RequestBody的使用
5. @Qualifier
用于在Controller中需要注入service但又有两个相关实现类时区分开到底是哪一个impl。
未完待续....