java注解基础可以看:java注解源码–注解基础知识
java注解虽然方便了减少配置,但是【无法调试】,【破坏封装】,【增加了学习负担】
工作中经常看到各种注解,如果不了解他的作用,也就无法掌握核心代码的功能以及运行流程,比如springcloud的注解,微服务系列的注解eureka,ribbon,feign,还有可能是公司内部使用的注解
@Override
【类包】java.lang.Override
【目标】方法
【源自】依赖jdk
【作用】覆盖重写父类方法
@Deprecated
【类包】java.lang.Deprecated
【目标】方法
【源自】依赖jdk
【作用】表明该方法废弃,可能在将来移除,最好不用
@SuppressWarnings
【类包】java.lang.SuppressWarnings
【目标】类型、属性、方法、参数、构造方法、局部变量
【源自】依赖jdk
【作用】压制禁止编译时报的警告信息
【用例】@SuppressWarnings(“all”) 可选值 [ all, boxing, cast, dep-ann, deprecation, fallthrough, finally, hiding, incomplete-switch, nls, null, rawtypes, restriction, serial, static-access, synthetic-access, unchecked, unqualified-field-access, unused ]
@Controller
【类包】org.springframework.stereotype.Controller
【目标】类型
【源自】依赖spring
【作用】表明此类为控制器类,会放入spring bean,value指定bean Id,配合RequestMapping注解实现访问,基本等价于Component注解,放在控制层
@Component
【类包】org.springframework.stereotype.Component
【目标】类型
【源自】依赖spring
【作用】会放入spring bean,value指定bean Id,配合其他spring注解完成自动装配,Ioc等待,当不确定放到哪个层时
@RequestMapping
【类包】org.springframework.web.bind.annotation.RequestMapping
【目标】方法、类型
【源自】依赖springWeb
【作用】表明此类为控制器类,会放入spring bean,value指定bean Id,配合RequestMapping注解实现访问,基本等价于Component注解
【用例】 @RequestMapping(value = “/login.do”, method = RequestMethod.POST, consumes=”application/json”, produces = “application/json;charset=UTF-8”)
限定post方法,consumes只处理application/json类型的请求,produces指定返回类型
value = "/login$ext" 在kotlin的.kt中,ext是Object Const {const val ext = ".json"}
value = "/login"+Const.ext Const.ext是类Const的final字符ext
value = "${adminPath}" 是配置文件中的值property-placeholder,在配置文件中也可以用
@RestController
【类包】org.springframework.web.bind.annotation.RestController
【目标】类型
【源自】依赖springWeb
【作用】表明此类为控制器类,会放入spring bean,value指定bean Id,配合RequestMapping注解实现访问,等价于注解Controller和ResponseBody
@ResponseBody
【类包】org.springframework.web.bind.annotation.ResponseBody
【目标】类型、方法
【源自】依赖springWeb
【作用】方法返回的结果就是response的body,跳过视图处理,根据返回值的类型会自动调用converter转换
@RequestBody
【类包】org.springframework.web.bind.annotation.RequestBody
【目标】参数
【源自】依赖springWeb
【作用】将请求参数绑定到方法的参数,自己就不用去接受参数了,参数可以是数组,对象,来接受多个参数
@PathVariable
【类包】org.springframework.web.bind.annotation.PathVariable
【目标】参数
【源自】依赖springWeb
【作用】请求的uri绑定到方法参数
【用例】
@RequestMapping(“/owners/{ownerId}”)
public void getId(@PathVariable String ownerId) 获取请求中的id绑定到方法的参数
@RequestHeader
【类包】org.springframework.web.bind.annotation.RequestHeader
【目标】参数
【源自】依赖springWeb
【作用】请求的header头绑定到方法参数
【用例】public void test(@RequestHeader(“Keep-Alive”) long keepAlive)
@Resource
【类包】javax.annotation.Resource
【目标】类型、属性、方法
【源自】依赖jdk
【作用】运行时,jdk会自己通过查找注入instance
@Service
【类包】org.springframework.stereotype.Service
【目标】类型
【源自】依赖spring
【作用】会放入spring bean,value指定bean Id,基本等价于Component注解,主要用在service层
@Bean
【类包】org.springframework.context.annotation.Bean
【目标】方法、注解
【源自】依赖spring
【作用】方法或注解可以产生一个bean,value指定bean Id
@Configuration
【类包】org.springframework.context.annotation.Configuration
【目标】类型
【源自】依赖spring
【作用】value指定bean Id,配置类,里面多为被Bean注解的方法,生成指定类型的类,覆盖配置等待
@Autowired
【类包】org.springframework.beans.factory.annotation.Autowired
【目标】构造方法、方法、参数、属性、注解
【源自】依赖spring
【作用】注入instance,Ioc,spring通过查找bean注入,如果出错,就是没有在spring的applicationcontext里没有找这样的bean(id,类型)
@Repository
【类包】org.springframework.stereotype.Repository
【目标】类型
【源自】依赖spring
【作用】基本等价于Component注解, 主要用在dao层
@Qualifier
【类包】org.springframework.beans.factory.annotation.Qualifier
【目标】属性、方法、参数、类型、注解
【源自】依赖spring
【作用】当bean可能重名或者spring 不知道该注入哪个bean时,限定bean id
@Scope
【类包】org.springframework.context.annotation.Scope
【目标】类型、方法
【源自】依赖spring
【作用】显示bean产生的方式,
【用例】@Scope(value = SCOPE_SINGLETON) import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_SINGLETON; 或者直接写字符”singleton”,
ConfigurableBeanFactory#SCOPE_PROTOTYPE
ConfigurableBeanFactory#SCOPE_SINGLETON
org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
从上可以看出(还有其他的scope,看WebApplicationContext)
["singleton","prototype"]适合在产生bean的那些注解里用
["request","session"] 仅适合springweb
自定义scope看
org.springframework.beans.factory.config.CustomScopeConfigurer
@Async
【类包】org.springframework.scheduling.annotation.Async
【目标】方法、类型
【源自】依赖spring
【作用】异步方法调用,配合java.util.concurrent.Future或者org.springframework.util.concurrent.ListenableFuture或java.util.concurrent.CompletableFuture使用
@Scheduled
【类包】org.springframework.scheduling.annotation.Scheduled
【目标】方法、注解
【源自】依赖spring
【作用】定时执行方法
【用例】@Scheduled(cron=”0/10 * * * * ? “) //每10秒执行一次 linux的crontab
@Scheduled(fixedRate = 5000) //每5秒
@Scheduled(fixedDelay = 5000) //调用后推迟5秒执行
@Scheduled(initialDelay = 5000) //第一次推迟5秒执行,配合其他定时使用
@SpringBootApplication
【类包】org.springframework.boot.autoconfigure.SpringBootApplication
【目标】类型
【源自】依赖springboot或springcloud,如果启动后没报错直接停止,看pom.xml的spring-boot-starter-web或者spring-cloud-starter-web, 这是容器类
【作用】在有main方法的类上注释,可以作为启动类,启动springboot
@EnableEurekaServer
【类包】org.springframework.cloud.netflix.eureka.server.EnableEurekaServer
【目标】类型
【源自】依赖springcloud,看pom.xml的spring-cloud-starter-eureka-server
【作用】在springboot的启动类上使用,说明这是微服务注册中心Eureka服务器
@EnableEurekaClient
【类包】org.springframework.cloud.netflix.eureka.EnableEurekaClient
【目标】类型
【源自】依赖springcloud,看pom.xml的spring-cloud-starter-eureka
【作用】在springboot的启动类上使用,说明这是微服务Eureka的客户端(这是一个具体服务需要到Eureka服务器注册)
@EnableZuulProxy
【类包】org.springframework.cloud.netflix.zuul.EnableZuulProxy
【目标】类型
【源自】依赖springcloud,看pom.xml的spring-cloud-starter-zuul
【作用】在springboot的启动类上使用,说明这是微服务的zuul路由组件
@EnableFeignClients
【类包】org.springframework.cloud.netflix.feign.EnableFeignClients
【目标】类型
【源自】依赖springcloud
【作用】在springboot的启动类上使用,说明这个应用要使用远程过程调用rpc,会扫描接口文件,被@FeignClient注解的就是要远程方法调用的
@FeignClient
【类包】org.springframework.cloud.netflix.feign.EnableFeignClients
【目标】类型(一般在接口注解)
【源自】依赖springcloud
【作用】说明这个接口要使用远程过程调用rpc, 配合EnableFeignClients注解
【样例】@FeignClient(name = “authLogin”, url=”http://1.1.1.1:22”)调用url上的服务authLogin来实现rpc,接口类可能还有RequestMapping注解。没有url的可能会配合Eurekaclient来实现当前微服务上的rpc调用
@InitBinder
【类包】org.springframework.web.bind.annotation.InitBinder
【目标】方法()
【源自】依赖springweb
【作用】绑定自定义的propertyeditor,实现将请求request绑定到复杂属性时的请求字符string到属性的转换
【样例】
@InitBinder
public void bindingPreparation(WebDataBinder binder) {
DateFormat dateFormat = new SimpleDateFormat("MMM d, YYYY");
CustomDateEditor orderDateEditor = new CustomDateEditor(dateFormat, true);
binder.registerCustomEditor(Date.class, orderDateEditor);
}
@LoadBalanced 与@RibbonClient
【类包】org.springframework.cloud.client.loadbalancer.LoadBalanced
org.springframework.cloud.netflix.ribbon.RibbonClient
【目标】具体看源码
【源自】依赖springcloud,ribbon
【作用】负载均衡作用,LoadBalanced标识作用,表明需要使用负载均衡策略,RibbonClient配置负载均衡策略
【样例】
@LoadBalanced //标识作用 ,没有参数
//为服务名"some-service"配置了负载均衡策略,具体的策略是配置类SomeServiceConfig
@RibbonClient(name = "some-service", configuration = SomeServiceConfig.class)