Java註解

flag

解釋註解的方式:反射!反射是jdk中提供的一種機制,經過讀取編譯後的運行文件,反向獲取類信息的一種手段!能夠經過反射獲取類、方法、成員變量上的運行時註解內容!

元註解: 能註解到註解上的註解,能用在其餘註解上的註解html

JDK

從Java源碼中提取的全部註解
註解 版本 說明
@WebParam 表示方法的參數
@Oneway 表示爲只有輸入消息而沒有輸出消息的 Web Service 單向操做
@WebResult 表示方法的返回值
@HandlerChain 使 Web Service 與外部定義的處理程序鏈相關聯。
@WebService 用於對接口,類進行註解,表示要發佈的web服務
@WebMethod 該註解用於用@WebService註解的類或接口的方法上,表示要發佈的方法
@SOAPMessageHandlers
@SOAPMessageHandler
@SOAPBinding SOAP綁定類型:RPC、DOCUMENT
@InitParam
@Resource
@Resources
@PreDestroy Servlet2.5 被@PreDestroy修飾的方法會在服務器卸載Servlet以前運行,而且只會被服務器調用一次
@Generated
@PostConstruct Servlet2.5 被@PostConstruct修飾的方法會在服務器加載Servle且構造函數以後執行,而且只會被服務器執行一次
@RespectBinding
@ResponseWrapper
@WebServiceRefs
@Action
@RequestWrapper
@WebServiceProvider
@WebServiceRef
@FaultAction
@WebFault
@ServiceMode
@WebEndpoint
@BindingType
@WebServiceClient
@Addressing
@MTOM
@WebServiceFeatureAnnotation
@XmlSeeAlso
@XmlElementDecl
@XmlIDREF
@XmlValue
@XmlAccessorType
@XmlMixed
@XmlID
@XmlRootElement
@XmlElementRef
@XmlEnum
@XmlElementWrapper
@XmlEnumValue
@XmlType
@XmlAccessorOrder
@XmlSchemaTypes
@XmlInlineBinaryData
@XmlSchema
@XmlAnyElement
@XmlSchemaType
@XmlRegistry
@XmlList
@XmlAttribute
@XmlAttachmentRef
@XmlNs
@XmlMimeType
@XmlElements
@XmlElement
@XmlElementRefs
@XmlTransient
@XmlAnyAttribute
@XmlJavaTypeAdapters
@XmlJavaTypeAdapter
@Interned
@NotNull
@Nullable
@MessageDumping
@FeatureConstructor
@FeatureListValidatorAnnotation
@InstanceResolverAnnotation
@SchemaValidation
@Serialization
@StreamingAttachment
@UsesJAXBContext
@MemberSubmissionAddressing
@XmlAccessorFactory
@OverrideAnnotationOf
@XmlIsSet
@XmlLocation
@WsgenProtocol
@InheritedAttributes
@DescriptorFields
@ParameterNames
@ManagedAttribute
@AMXMetadata
@InheritedAttribute
@IncludeSubclass
@ManagedData
@ManagedOperation
@Description
@NameValue
@ManagedObject
@DescriptorKey
@Taxonomy
@Reset
@ProbeParam
@ProbeProvider
@Probe
@ProbeListener
@EnvelopeStyle
@Property
@DatabindingMode
@Reference
@Immutable
@Ignore
@Logger
@Setter
@Constructor
@Optimistic
@SpecializedFunction
@ScriptClass
@Function
@Getter
@CallerSensitive
@Contended
@MXBean
@ProbeName
@ProviderName
@Attributes
@NameAttributes
@ProviderAttributes
@FunctionAttributes
@ModuleName
@ModuleAttributes
@ArgsAttributes
@FunctionName
@ConstructorProperties
@Transient
@Deprecated jdk1.5 內置註解:用於標誌過期的類、方法和成員變量
@FunctionalInterface jdk1.8 函數式接口註解,用於定義函數式接口
@SafeVarargs jdk1.7 參數安全類型註解,用於提示用戶參數安全
@Override jdk1.5 內置註解:用於修飾重寫的方法
@SuppressWarnings jdk1.5 內置註解:用戶忽略@Deprecated標誌過的警告
@Repeatable jdk1.8 表示註解的屬性能夠重複!@Repeatable通俗來說,就是註解容器!
@Inherited jdk1.5 元註解:子類繼承父類的註解(子類沒有任何註解修飾)
@Retention jdk1.5 元註解:表示註解保留週期
@Documented jdk1.5 元註解:將註解寫入文檔
@Target jdk1.5 元註解:表示註解可使用在什麼地方
@Native jdk1.8 生成本機頭文件的工具的提示,以肯定是否須要頭文件,若是須要,它應該包含哪些聲明。
@Validate
@RequireContainer
@Require
@Exported
@SupportedOptions
@SupportedAnnotationTypes
@SupportedSourceVersion
@Trusted

Servlet

Tomcat 7.0及以上版本的 server.api纔有註解
註解 版本 說明
@WebServlet Servlet3.0 用於聲明servlet
@WebListener Servlet3.0 用於聲明過監聽器,可經過控制filter的文件名來控制執行順序
@WebFilter Servlet3.0 用於聲明過濾器
@WebInitParam Servlet3.0 爲 Servlet 或者過濾器指定初始化參數,配置@WebServlet或@WebFilter時使用
@MultipartConfig Servlet3.0 HttpServletRequest 提供的對上傳文件的支持,該註解標註在 Servlet 上面
@HandlesTypes
@HttpConstraint
@HttpMethodConstraint
@ServletSecurity

Validation

JSR-303JAVA EE 6中的一項子規範,叫作 Bean Validation,可是這只是一個接口,沒有具體實現。

javax.validation.Validationhibernate-validatorSpring validtor
提供了JSR 303規範中全部內置constraint 的實現,除此以外還有一些附加的 constraintjava

註解 支持Java類型 備註
@AssertFalse Boolean, boolean 驗證元素值必須爲flase
@AssertTrue Boolean, boolean 驗證元素值必須爲true,不然拋異常
@CreditCardNumber CharSequence 驗證信用卡號碼是否有效
@DecimalMax Object 驗證數值是否小於等於指定值
@DecimalMin CharSequence 驗證數值是否大於等於指定值
@Digits(integer = 3, fraction = 2) Long, Integer, Double, Float 驗證註解的元素值的整數位數和小數位數上限
@Email CharSequence 驗證元素必須是電子郵箱地址
@Future java.util.Date, java.util.Calendar 驗證日期爲當前時間以後
@FutureOrPresent java.util.Date, java.util.Calendar 驗證日期爲當前時間或以後一個時間
@Length(min=,max=) CharSequence 驗證元素值包含在一個區間
@Max CharSequence 檢驗當前數值小於等於指定值
@Min BigDecimal, BigInteger, byte, short,int, long,Number. 檢驗當前數值大於等於指定值
@NotBlank CharSequence 驗證元素值不爲null且移除兩邊空格後長度大於0
@NotEmpty CharSequence,Collection,Map and Arrays 驗證元素值不爲null且不爲空(字符串長度不爲0、集合大小不爲0)
@NotNull Object 驗證元素值不能爲 null
@Null Object 驗證元素值爲null
@Past java.util.Date, java.util.Calendar 驗證日期爲當前時間以前
@PastOrPresent java.util.Date, java.util.Calendar 驗證日期爲當前時間或以前
@Pattern(regex=,flag=) CharSequence 驗證元素必須符合指定的正則表達式
@Range(min=,max=,message=) CharSequence 驗證數值爲指定值區間範圍內
@Size(max=, min=) String,Collection,Map,arrays,CharSequence 驗證元素個數包含在一個區間
@UniqueElements Collection 校驗集合中的元素必須保持惟一 不然異常
@URL CharSequence 驗證日期爲當前時間以前
@Valid Object 驗證關聯對象元素進行遞歸校驗檢查
@ScriptAssert CharSequence 腳本表達式的計算結果爲true
@SafeHtml CharSequence 可能包含不安全的html內容

JAX-RS

JerseyCxF框架實現了 JSR311/ JSR339標準

jersey經常使用註解git

Annotation 做用 說明
@GET 查詢請求 至關於數據庫的查詢數據操做
@PUT 更新請求 至關於數據庫的更新數據操做
@POST 插入請求 至關於數據庫的插入數據操做
@DELETE 刪除請求 至關於數據的刪除數據操做
@Path uri路徑 定義資源的訪問路徑,client經過這個路徑訪問資源。好比:@Path("user")
@Produces 指定返回MIME格式 資源按照那種數據格式返回,可取的值有:MediaType.APPLICATION_XXX。好比:@Produces(MediaType.APPLICATION_XML)
@Consumes 接受指定的MIME格式 只有符合這個參數設置的請求再能訪問到這個資源。好比@Consumes("application/x-www-form-urlencoded")
@PathParam uri路徑參數 寫在方法的參數中,得到請求路徑參數。好比:@PathParam("username") String userName
@QueryParam uri路徑請求參數 寫在方法的參數中,得到請求路徑附帶的參數。好比:@QueryParam("desc") String desc
@DefaultValue 設置@QueryParam參數的默認值 若是@QueryParam沒有接收到值,就使用默認值。好比:@DefaultValue("description") @QueryParam("desc") String desc
@FormParam form傳遞的參數 接受form傳遞過來的參數。好比:@FormParam("name") String userName
@BeanParam 經過Bean的形式傳遞參數 接受client傳遞的bean類型的參數,同時這個bean能夠在屬性上配置@FormParam用以解決client的屬性名稱和bean的屬性名稱不一致的問題。好比:@BeanParam User user
@Context 得到一些系統環境信息 經過@Context能夠得到如下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等
@XmlRootElement 將bean轉換爲xml 若是要將bean以xml或json的格式返回,必需要這個註解。好比:@XmlRootElementpublic class User{...}
@XmlElements
@XmlElement

spring

// 手動回滾事務
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

聲明bean的註解

  • @Component 組件,沒有明確的角色
  • @Service 在業務邏輯層使用(service層)
  • @Repository 在數據訪問層使用(dao層)
  • @Controller 在展示層使用,控制器的聲明(C)

注入bean的註解

均可以註解在set方法和屬性上,推薦註解在屬性上(一目瞭然,少寫代碼)。
  • @Autowired 由Spring提供
  • @Inject 由JSR-330提供
  • @Resource 由JSR-250提供

java配置類相關注解

  • @Configuration 聲明當前類爲配置類,至關於xml形式的Spring配置(類上)
  • @Bean 註解在方法上,聲明當前方法的返回值爲一個bean,替代xml中的方式(方法上)
  • @Configuration 聲明當前類爲配置類,其中內部組合了@Component註解,代表這個類是一個bean(類上)
  • @ComponentScan 用於對Component進行掃描,至關於xml中的(類上)
  • @WishlyConfiguration@Configuration@ComponentScan的組合註解,能夠替代這兩個註解

切面(AOP)相關注解

Spring支持AspectJ的註解式切面編程。
  • @Aspect 聲明一個切面(類上)
使用 @After@Before@Around定義建言(advice),可直接將攔截規則(切點)做爲參數。
  • @After 在方法執行以後執行(方法上)
  • @Before 在方法執行以前執行(方法上)
  • @Around 在方法執行以前與以後執行(方法上)
  • @PointCut 聲明切點
在java配置類中使用 @EnableAspectJAutoProxy註解開啓Spring對AspectJ代理的支持(類上)
AOP配置元素 描述
<aop:advisor> 定義AOP通知器
<aop:after> 定義AOP後置通知(無論該方法是否執行成功)
<aop:after-returning> 在方法成功執行後調用通知
<aop:after-throwing> 在方法拋出異常後調用通知
<aop:around> 定義AOP環繞通知
<aop:aspect> 定義切面
<aop:aspect-autoproxy> 定義@AspectJ註解驅動的切面
<aop:before> 定義AOP前置通知
<aop:config> 頂層的AOP配置元素,大多數的<aop:*>包含在<aop:config>元素內
<aop:declare-parent> 爲被通知的對象引入額外的接口,並透明的實現
<aop:pointcut> 定義切點

@Bean的屬性支持

  • @Scope 設置Spring容器如何新建Bean實例(方法上,得有@Bean) ,其設置類型包括:github

    • Singleton (單例,一個Spring容器中只有一個bean實例,默認模式),
    • Protetype (每次調用新建一個bean),
    • Request (web項目中,給每一個http request新建一個bean),
    • Session (web項目中,給每一個http session新建一個bean),
    • GlobalSession(給每個 global http session新建一個Bean實例)
  • @StepScope 在Spring Batch中還有涉及
  • @PostConstruct 由JSR-250提供,在構造函數執行完以後執行,等價於xml配置文件中bean的initMethod
  • @PreDestory 由JSR-250提供,在Bean銷燬以前執行,等價於xml配置文件中bean的destroyMethod

@Value註解

@Value 爲屬性注入值(屬性上),支持以下方式的注入
  • @Value("Michael Jackson") String name; 注入普通字符
  • @Value("#{systemProperties['os.name']}") String osName; 注入操做系統屬性
  • @Value("#{ T(java.lang.Math).random() * 100 }") String randomNumber; 注入表達式結果
  • @Value("#{domeClass.name}") String name; 注入其它bean屬性
  • @Value("classpath:com/hgs/hello/test.txt") String Resource file; 注入文件資源
  • @Value("http://www.cznovel.com") Resource url; 注入網站資源
  • @Value("${book.name}") String bookName; 注入配置文件

注入配置使用方法web

編寫配置文件(test.properties)
book.name= test
@PropertySource 加載配置文件(類上)
@PropertySource("classpath:/test.propertie")
③ 還需配置一個 PropertySourcesPlaceholderConfigurer的bean。

環境切換

  • @Profile 經過設定Environment的ActiveProfiles來設定當前context須要使用的配置環境。(類或方法上)
  • @Conditional Spring4中可使用此註解定義條件話的bean,經過實現Condition接口,並重寫matches方法,從而決定該bean是否被實例化。(方法上)

異步相關

@EnableAsync 配置類中,經過此註解開啓對異步任務的支持,敘事性AsyncConfigurer接口(類上)

@Async 在實際執行的bean方法使用該註解來申明其是一個異步任務(方法上或類上全部的方法都將異步,須要@EnableAsync開啓異步任務)正則表達式

定時任務相關

  • @EnableScheduling 在配置類上使用,開啓計劃任務的支持(類上)
  • @Scheduled 來申明這是一個任務,包括cron,fixDelay,fixRate等類型(方法上,需先開啓計劃任務的支持)

@Enable*註解說明

這些註解主要用來開啓對xxx的支持。
  • @EnableAspectJAutoProxy 開啓對AspectJ自動代理的支持
  • @EnableAsync 開啓異步方法的支持
  • @EnableScheduling 開啓計劃任務的支持
  • @EnableWebMvc 開啓Web MVC的配置支持
  • @EnableConfigurationProperties 開啓對@ConfigurationProperties註解配置Bean的支持
  • @EnableJpaRepositories 開啓對SpringData JPA Repository的支持
  • @EnableTransactionManagement 開啓註解式事務的支持
  • @EnableTransactionManagement 開啓註解式事務的支持
  • @EnableCaching 開啓註解式的緩存支持

測試相關注解

  • @RunWith 運行器,Spring中一般用於對JUnit的支持
@RunWith(SpringJUnit4ClassRunner.class)
  • @ContextConfiguration 用來加載配置ApplicationContext,其中classes屬性用來加載配置類
@ContextConfiguration(classes={TestConfig.class})

SpringMVC註解

  • @EnableWebMvc 在配置類中開啓Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若無此句,重寫WebMvcConfigurerAdapter方法(用於對SpringMVC的配置)。
  • @Controller 聲明該類爲SpringMVC中的Controller
  • @RequestMapping 用於映射Web請求,包括訪問路徑和參數(類或方法上)
  • @ResponseBody 支持將返回值放在response內,而不是一個頁面,一般用戶返回json數據(返回值旁或方法上)
  • @RequestBody 容許request的參數在request體中,而不是在直接鏈接在地址後面。(放在參數前)
  • @PathVariable 用於接收路徑參數,好比@RequestMapping(「/hello/{name}」)申明的路徑,將註解放在參數中前,便可獲取該值,一般做爲Restful的接口實現方法。
  • @RestController 該註解爲一個組合註解,至關於@Controller@ResponseBody的組合,註解在類上,意味着,該Controller的全部方法都默認加上了@ResponseBody
  • @ControllerAdvice 經過該註解,咱們能夠將對於控制器的全局配置放置在同一個位置,註解了@Controller的類的方法可以使用@ExceptionHandler@InitBinder@ModelAttribute註解到方法上,這對全部註解了 @RequestMapping的控制器內的方法有效。
  • @ExceptionHandler 用於全局處理控制器裏的異常
  • @InitBinder 用來設置WebDataBinder,WebDataBinder用來自動綁定前臺請求參數到Model中。
  • @ModelAttribute 原本的做用是綁定鍵值對到Model裏,在@ControllerAdvice中是讓全局的@RequestMapping都能得到在此處設置的鍵值對。

Swagger2

註解名稱 註解屬性 做用域 屬性做用
@Api tags 說明該類的做用
value 說明該類的做用
@ApiOperation() value 方法 描述方法做用
notes 方法 提示內容
tags 方法 分組
@ApiParam() name 方法參數 參數名
value 方法參數 參數說明
required 方法參數 是否必填
@ApiModel() value 對象名
description 描述
@ApiModelProperty() value 方法 字段說明
name 方法 屬性名
dataType 方法 屬性類型
required 方法 是否必填
example 方法 舉例
hidden 方法 隱藏
@ApiImplicitParam() value 方法 參數說明
name 方法 參數名
dataType 方法 數據類型
paramType 方法 參數類型
example 方法 舉例
@ApiResponse() response 方法 返回類
code 方法 返回碼
message 方法 返回信息
examples 方法 例子
註解 屬性 備註
@Api value 字符串 可用在class頭上,class描述
description 字符串
@Api(value = "xxx", description = "xxx")
@ApiOperation value 字符串 可用在方法頭上.參數的描述容器
notes 字符串
@ApiOperation(value = "xxx", notes = "xxx")
@ApiImplicitParams {} @ApiImplicitParam數組 可用在方法頭上.參數的描述容器
@ApiImplicitParams({@ApiImplicitParam1,@ApiImplicitParam2,...})
@ApiImplicitParam name 字符串 與參數命名對應 可用在@ApiImplicitParams裏
value 字符串 參數中文描述
required 布爾值 true/false
dataType 字符串 參數類型
paramType 字符串 參數請求方式:query/path
query:對應@RequestParam?傳遞
path: 對應@PathVariable{}path傳遞
defaultValue 字符串 在api測試中默認值
用例參見項目中的設置
@ApiResponses {} @ApiResponse數組 可用在方法頭上.參數的描述容器
@ApiResponses({@ApiResponse1,@ApiResponse2,...})
@ApiResponse code 整形 可用在@ApiResponses裏
message 字符串 錯誤描述
@ApiResponse(code = 200, message = "Successful")
相關文章
相關標籤/搜索