您的位置:首页 > 编程语言 > Java开发

java常见注解Annotation--开发工作学习中经常见到的注解---欢迎补充

2017-12-29 11:26 507 查看
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

4000

@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)


具体区别看:Difference between @RibbonClient and @LoadBalanced
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息