Pytanie Czy używasz adnotacji Java? [duplikować]


Możliwe duplikaty:
Jak i gdzie są używane adnotacje w Javie?
Fasola Java, adnotacje: co oni robią? Jak oni mi pomagają?  

W kółko czytałem o adnotacjach Java 5 jako "zaawansowanej funkcji" tego języka. Do niedawna nie używałem adnotacji (innych niż zwykłe @Override, & c), ale praca nad kilkoma projektami związanymi z serwisem zmusiła mnie do tego. Odkąd nauczyłem się języka Java przed wersją 5, nigdy nie poświęcałem czasu, by usiąść i pogadać z systemem adnotacji.

Moje pytanie - czy rzeczywiście tak posługiwać się adnotacje? Jak są dla ciebie pomocne, z dnia na dzień? Ilu użytkowników StackOverflow musiało napisać niestandardową adnotację?


15
2018-03-01 18:08


pochodzenie


To dość subiektywne. Zmodyfikuj i oznacz to pytanie jako Community Wiki. Oto kilka mniej lub bardziej podobnych pytań z interesującymi odpowiedziami: stackoverflow.com/questions/2072681/..., stackoverflow.com/questions/1372876/... i stackoverflow.com/questions/1862666/... - BalusC
Tworzenie niestandardowego programu testowego za pomocą adnotacji java - Ajit Singh


Odpowiedzi:


Być może najbardziej przydatnym i używanym przypadkiem adnotacji Java jest użycie POJO + Adnotacja zamiast plików konfiguracyjnych xml

Używam go dużo, ponieważ (jak już wspomniano), jeśli korzystasz z ram internetowych (takich jak wiosna lub szew), zazwyczaj mają mnóstwo adnotacji, które ci pomogą.

Niedawno napisałem kilka adnotacji, aby zbudować niestandardową statemachine, cel sprawdzania poprawności i adnotacje adnotacji (używając ich metadanych). I IMO bardzo pomagają, czyniąc kod czystszym, łatwiejszym do zrozumienia i zarządzania.


6
2018-03-01 18:20





Aktualny projekt (200KLOC), adnotacje, których cały czas używam to:

@NotNull / @Nullabe
@Override
@Test
@Ignore
@ThreadSafe
@Immutable

Ale nie napisałem jeszcze własnej adnotacji ... Jeszcze!


3
2018-03-01 18:35





Użyłem adnotacji dla:

  • Hibernate, więc nie muszę przechowywać tych ogromnych plików XML;
  • Serializacja XML, więc opiszę, jak obiekt powinien być renderowany w samym obiekcie;
  • Usunięcie ostrzeżenia o ostrzeżeniach, których nie chcę wyłączać (a dla których nie można poprawnie rozwiązać danego przypadku).

Stworzyłem adnotacje dla:

  • Opisz stan wymagany do wykonania mojej metody (na przykład, że użytkownik musi być zalogowany);
  • Oznacz moją metodę jako wykonywalny z konkretnej platformy z dodatkowymi właściwościami dla tej platformy;
  • I prawdopodobnie inne podobne operacje.

Adnotacje, które utworzyłem, są odczytywane za pomocą Reflection, gdy potrzebuję uzyskać więcej informacji o obiekcie, nad którym pracuję. Działa i działa świetnie.


2
2018-03-01 20:12





Adnotacje są przeznaczone tylko dla frameworków i działają świetnie w hibernacji / jpa. dopóki nie napiszesz frameworka, który potrzebuje dodatkowych informacji z przekazanych mu obiektów, nie będziesz pisać własnych adnotacji.

jednak istnieje nowa i fajna funkcja, która umożliwia pisanie własnych adnotacji w testach - http://blog.mycila.com/2009/11/writing-your-own-junit-extensions-using.html


1
2018-03-01 18:49



To znaczy, dopóki nie uświadomisz sobie wszystkich przydatnych rzeczy, które możesz z nimi zrobić, jeśli sam je napiszesz! - Matthew Flynn


Codziennie korzystam z adnotacji i są wspaniałe. Używam ich z jsf i jpa i znajduję je o wiele łatwiejsze w zarządzaniu i pracy niż alternatywne konfiguracje XML.


0
2018-03-01 18:51





Używam adnotacji do opisywania w moim stanie systemu synchronizacji, jakie klasy są specjalizacjami przypisanych klas i środowiska, w którym powinny być używane (kiedy obiekt jest tworzony, będzie działać dla jego list encji, które są najlepszymi klasami encji do Utwórz dla węzłów w sieci, tj. obiekt Player dla węzła serwera jest zamiast niego podmiotem ServerPlayer). Dodatkowo opisane są atrybuty w klasach i sposób ich synchronizacji między maszynami.


0
2018-03-01 20:16





Właśnie wykorzystaliśmy adnotacje, aby stworzyć prosty sposób sprawdzania poprawności naszych POJO:

@NotEmpty
@Pattern(regex = "I")
private String value;

Następnie uruchamiamy to przez Weryfikator hibernacji który zrobi dla nas wszystkie nasze zatwierdzenie:

import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;

public void validate(T validateMe) {
    ClassValidator<T> validator = new ClassValidator<T>((Class<T>) validateMe.getClass());
    InvalidValue[] errors = validator.getInvalidValues(validateMe);
}

Działa świetnie. Ładny, czysty kod.


0
2018-03-01 21:07





Używamy niestandardowych adnotacji jako część naszego systemu testowania integracji:

@Artyfikat: kojarzy test integracji z identyfikatorem problemu. Macierze śledzenia są automatycznie generowane dla naszych działów testowych i regulacyjnych.

@Exclude: Ignoruje test integracji oparty na platformie / wersji przeglądarki. Utrzymuje błędy IE 6 z powodu zapychania naszych nocnych testów :)

@SeleniumSession: Definiuje specyficzne dla testu ustawienia selenu dla każdego testu integracji.

Są bardzo potężnym narzędziem, ale musisz ich używać ostrożnie. Wystarczy spojrzeć na te wczesne pliki klasy .NET Enterprise, aby zobaczyć, jakie koszmarne adnotacje mogą być koszmarne :)


0
2018-03-01 21:09





Mamy program do tworzenia raportów jako część naszej aplikacji internetowej. Użytkownik może dodać dużą liczbę widżetów, które są małymi odmianami tego samego zestawu motywów (wykresów, tabel itp.).

Interfejs użytkownika opiera się na niestandardowych adnotacjach w klasach widgetów. (np. adnotacja może zawierać wartość domyślną i prawidłowe wartości, które byłyby wyświetlane jako rozwijane lub flaga wskazująca, czy pole jest obowiązkowe).

Okazało się, że jest to dobry sposób na umożliwienie programistom kreowania widżetów bez konieczności dotykania interfejsu użytkownika.


0
2018-03-01 20:24