前言
最近学到springcloud,里面涉及到许多注解,除了一些常用的注解,大部分都是一知半解,这篇文章主要是整理一下这些注解方便后面忘了时可以回顾。
首先,先明确一下springcloud是什么?spring框架在开发中有效整合了多方资源,使用依赖注入对对象有效管理,面向切面编程的实现对项目模块松耦合有着不错的效果,可以说spring框架在现下已是一个java程序员必不可缺的一门功课。而由spring衍生的springboot是spring快速配置脚手架,可以帮助我们快速的开发单一的微服务。springcloud则是对这些微服务的治理的一套分布式服务框架,用于管理微服务。
常见注解总结
组件注解
@Controller 控制层, @Service 业务层,@Repository 展示层,以及一个通用的@Component。在类前面加这些注解后可以将他们纳入spring容器的管理,便于后续的维护。@Controller后续还有@RestController,与@Controller无太大不同,区别是@RestController返回前端的格式是json,而@Controller返回的是model。
注入注解
@Autowired自动注入和@Resource bean注入。两者都可以作为注入属性的修饰,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。
@Resource是Java自己的注解,@Resource有两个属性是比较重要的,分是name和type;Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Autowired是spring的注解,是spring2.5版本引入的,Autowired只根据type进行注入,不会去匹配name。如果涉及到type无法辨别注入对象时,那需要依赖@Qualifier或@Primary注解一起来修饰。
请求相关注解
@RequestMapping和@RequestParam注解,前者绑定url,后者绑定参数。当客户端传来请求时,请求url与请求方式method和@RequestMapping匹配,传上来的参数由@RequestParam进行接收,映射到方法参数中。
事务注解
@Transactional与@TransactionalEventListener,前者为一些使用多条sql语句操作添加事务注解,保证数据库的一致性,不会有脏数据入库,后者是事务事件控制,比如可以在注册事务后发送注册成功邮件。
启动器注解
@SpringBootApplication,申明让spring boot自动给程序进行必要的配置,等价于以默认属性使用@Configuration配置spring,@EnableAutoConfiguration开启自动配置和@ComponentScan自动扫描。
Eureka注册中心相关注解
@EnableEurekaServer 启动一个服务注册中心;@EnableDiscoveryclient 注册应用为Eureka客户端应用,以获得服务发现的能力。这两个都是加载启动器上,声明为注册中心还是注册中心注册的其他服务。
配置中心相关注解
@EnableConfigServer 开启配置服务,在配置中心启动器上申明;@RefreshScope 刷新配置文件,在配置文件交由配置中心管理的服务的控制器上申明。
其他注解
@Value(“${}”)可以注入配置文件里面的内容,如yml文件下自定义test下的name属性可以使用@Value("${test.name}")注解获取。
常用的 lombok 注解
@Data 注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Log4j 注解在类上;为类提供一个 属性名为log 的 log4j 日志对象