이미 Java 프로그래밍을 사용하고 있고 Spring 및 Hibernate와 같은 인기있는 프레임 워크를 사용하고 있다면 주석 사용에 익숙해야합니다. 기존 프레임 워크로 작업 할 때는 일반적으로 주석을 사용하기에 충분합니다. 그러나 때때로 자신의 주석을 만들기 위해 자신의 필요를 만들어야합니까?
얼마 전, 나는 주석을 만들어야 할 이유를 발견했습니다.이 주석은 다양한 데이터베이스에 저장된 공통 데이터와 관련된 프로젝트였습니다.
장면 설명
비즈니스는 동일한 데이터를 저장하는 다양한 데이터베이스를 보유하고 있으며, 데이터 업데이트를 유지하는 자체 다른 방법이 있습니다 문제.
그러나 프로젝트가 시작되기 전에 비즈니스는 데이터 거리를 동기화 할 수있는 양을 알고 있으며, 첫 번째 단계는 해당 데이터의 데이터의 보편적 데이터를 보여주는 문을 만들어야합니다. . 그리고 그 가치를 확인하십시오.
주석
잠시 조사한 후에는 주석을 사용하여 데이터 비교 및 보고서 처리가 매우 유연하고 확장되었습니다 구성은 특정 클래스 경로의 파일에 숨겨져 있지 않습니다.
가장 간단한 경우, 주석은 코드 실행 자체의 작동없이 정보를 제공하는 정보를 제공하는 것이 좋습니다 친숙하지만이를 위해서는 자신만의 주석을 만들 필요가 없으므로 메타 데이터의 자세한 정보를 지정할 수있는 요소가 포함 된 Java 유형의 새로운 유형을 만들 필요가 있습니다.
이 프로젝트의 예는 다음과 같습니다.
@target (elementtype.field) @rententionpolicy.runtime) public @interface reconfield { /*** value는 지정된 소스의 값을 비교하거나 실행 내에 값 또는 참조를 표시하는 데 사용됩니다. 소스를 비교하면 기본값을 비교하십시오. ) 기본 RecondSplayFormat. 값은 FIMIL 문자열에 대한 보고서에 표시해야 할 레이블을 나타냅니다. * / String Label (); ;}
이것은 구동 데이터 비교 프로세스가 어떻게 작동하는지에 대한 주요 주석입니다 나중에 토론하십시오. 대부분의 요소는 코드 목록에 하나의 메모로 소개됩니다.
@Target의 주석을 사용하면 해당 Java 요소에 주석이 사용되어야합니다.
@retention은 주석이 효과적 일 때를 지정할 수 있습니다.
이 데이터 검증 프로세스는 각 데이터베이스에 대한 쿼리를 실행하고 특정 비즈니스 레코드 유형에 대한 모든 필드의 엔티티 Bean 및 각 데이터베이스에서 값 실행 데이터 비교를 표시합니다 이러한 주석이 다른 데이터 비교 구성에서 어떻게 사용되는지 이해하기위한 몇 가지 예.
기존 값을 확인하고 각 데이터 소스의 정확한 일치 만 일치하려면 보고서에서 필드 ID와 필드 표시 만 제공하면됩니다.
@reconfield (id = customer_id, label = "customer id") private String customerID;
각 데이터 소스에서 찾은 값을 표시하려면 데이터 비교 없이는 비교 요소를 만들고 값을 False로 설정해야 할 수도 있습니다.
@reconfield (id = name, label = "name", comparesources = false) 개인 문자열 이름;
지정된 데이터 소스에서 찾은 값을 확인하려면이 제품을 사용하여 모든 값을 표시 할 수 있지만 요소에 나열된 데이터 소스 만 비교하십시오 방식으로, 모든 데이터 소스에 저장되지 않은 일부 데이터 시나리오는 재고 할 수 있습니다.
@reconfield (id = private_placement_flag, label = "private platement flag", sourcestocompare = {reconsource.legacy, reconsource.pace} g priveplacementflag;
이제 우리는 기본적인 요구를 충족했으며 복잡한 데이터 비교 기능을 위해 지정된 필드를 구현하는 문제를 해결해야합니다.
@target (elementtype.field) @retention (runtentionpolicy.runtime) public @interface reconcustomrule { /*** 값은 사용자 정의 규칙 프로세서를 사용하는 데 사용되는 매개 변수를 나타냅니다. 기본값은 매개 변수가 아닙니다. ]] 커스텀 런을위한 매개 변수,* /string [] params () default {}; 사용자 정의 규칙 프로세서의.*/class <?> processor () default defaultreconrule.class;}
이전 주석과 매우 유사합니다. 가장 큰 차이점은 @reconcustomrule 주석에 클래스를 지정합니다 규칙 프로세서가 사용하여 규칙을 실행하는 데 사용됩니다.
이제이 주석을 사용하는 예를 살펴 보겠습니다.
이 예에서는 증권 거래소가 미국이라면이 데이터를 건너 뛸 수있는 맞춤형 규칙을 사용합니다. 기록. 필드.
@reconfield (id = street_cusip, label = "street cusip", comparesources = false) @reconcustomrule (processor = skipnonUsexChangeComparisonRule.class) atre streetCusip;
여기서는 사용자 정의 규칙에 대한 매개 변수를 지정합니다.이 특수 데이터 비교는 1000에서 비교할 수 없습니다. 동일한 맞춤 규칙 세트를 여러 필드에 적용하려면 주석의 특성으로 인해 이러한 매개 변수는 정적 일 수 있으므로 동적으로 수정할 수 없다는 것입니다.
@reconfield (id = usd_mkt_cap, label = "시장 캡 USD", displayFormat = RecondIsplayFormat.numeric_whole, sourcestocompare = {reconsource.legacy, reconsource.pace, reconsource.bob_prcm})@reconcustomrule (processor = reconcustomrule). 10000 "}) Private Bigdecimal USDMKTCAP;
보시다시피, 우리는 몇 가지 간단한 주석 만 사용하고 있으며 다중 데이터 라이브러리 시나리오에 상당한 유연성을 갖춘 데이터 검증 보고서 기능을 설계했습니다. 따라서, 우리는 실제로 주석을 사용하여 발견 된 매핑 데이터 엔티티를 계산하고 처리에 직접 사용합니다.