Jakie są główne obszary, w których możemy używać Adnotacji? Czy ta funkcja zastępuje konfigurację opartą na XML?
java
annotations
CD Biju
źródło
źródło
Odpowiedzi:
Adnotacje to meta-obiekty, które można wykorzystać do opisania innych meta-obiektów . Meta-obiekty to klasy, pola i metody. Pytanie obiektu o jego meta-obiekt (np.
anObj.getClass()
) Nazywa się introspekcją . Introspekcja może pójść dalej i możemy zapytać meta-obiekt, jakie są jego adnotacje (npaClass.getAnnotations
.). Introspekcja i adnotacje należą do tak zwanych refleksji i metaprogramowania .Adnotacja musi być interpretowana w taki czy inny sposób, aby była przydatna. Adnotacje mogą być interpretowane w czasie programowania przez IDE lub kompilator, lub w czasie wykonywania przez środowisko.
Przetwarzanie adnotacji jest bardzo silnym mechanizmem i może być używane na wiele różnych sposobów:
@Deprecated, @Override
lub@NotNull
@Entity, @TestCase, @WebService
@Statefull, @Transaction
@Column, @XmlElement
We wszystkich przypadkach adnotacja służy do opisu elementu i wyjaśnienia jego znaczenia .
Przed JDK5 informacje wyrażane teraz adnotacjami musiały być przechowywane gdzie indziej, a pliki XML były często używane. Jednak wygodniej jest używać adnotacji, ponieważ będą one należeć do samego kodu Java, a zatem są znacznie łatwiejsze do manipulowania niż XML.
Wykorzystanie adnotacji:
... spójrz na przykład na projekt Lombok , który używa adnotacji do zdefiniowania sposobu generowania
equals
lubhashCode
metod.źródło
Istnieją różne aplikacje do adnotacji Java. Przede wszystkim mogą być używane przez kompilator (lub rozszerzenia kompilatora). Rozważmy na przykład adnotację Zastąp :
Ten jest faktycznie wbudowany w Java JDK. Kompilator zasygnalizuje błąd, jeśli jakaś metoda zostanie do niego oznaczona, co nie zastąpi metody odziedziczonej z klasy podstawowej. Ta adnotacja może być pomocna w celu uniknięcia typowego błędu, polegającego na tym, że faktycznie zamierzasz zastąpić metodę, ale tego nie zrobisz, ponieważ podpis podany w metodzie nie pasuje do podpisu zastępowanej metody:
Począwszy od JDK7, adnotacje są dozwolone na dowolnym typie. Tej funkcji można teraz używać do adnotacji kompilatora, takich jak NotNull , takich jak:
co pozwala kompilatorowi ostrzegać cię przed niewłaściwym / niesprawdzonym użyciem zmiennych i wartości zerowych .
Kolejna bardziej zaawansowana aplikacja do adnotacji obejmuje przetwarzanie refleksji i adnotacji w czasie wykonywania. To jest (myślę) to, co miałeś na myśli, mówiąc o adnotacjach jako „zamienniku konfiguracji opartej na XML”. Jest to rodzaj przetwarzania adnotacji wykorzystywanego na przykład przez różne frameworki i standardy JCP (trwałość, wstrzykiwanie zależności, jak go nazywasz) w celu zapewnienia niezbędnych metadanych i informacji o konfiguracji.
źródło
Adnotacje są formą metadanych (danych o danych) dodawanych do pliku źródłowego Java. Są one w dużej mierze wykorzystywane przez frameworki w celu uproszczenia integracji kodu klienta. Kilka przykładów ze świata rzeczywistego:
JUnit 4 - dodajesz
@Test
adnotację do każdej metody testowej, którą chcesz uruchomić program uruchamiający JUnit. Istnieją również dodatkowe adnotacje związane z konfigurowaniem testowania (jak@Before
i@BeforeClass
). Wszystkie te są przetwarzane przez moduł uruchamiający JUnit, który odpowiednio uruchamia testy. Można powiedzieć, że zastępuje konfigurację XML, ale adnotacje są czasem mocniejsze (mogą na przykład używać odbicia), a także są bliższe kodowi, do którego się odnoszą (@Test
adnotacja jest tuż przed metodą testową, więc cel tej metody jest jasne - służy również jako dokumentacja). Z drugiej strony konfiguracja XML może być bardziej złożona i może zawierać znacznie więcej danych niż adnotacje.Terakota - wykorzystuje zarówno adnotacje, jak i pliki konfiguracyjne XML. Na przykład
@Root
adnotacja informuje środowisko wykonawcze Terracotta, że pole z adnotacjami jest elementem głównym, a jego pamięć powinna być współużytkowana między instancjami VM. Plik konfiguracyjny XML służy do skonfigurowania serwera i podania mu klas, które mają być instrumentowane.Google Guice - przykładem może być
@Inject
adnotacja, która po zastosowaniu do konstruktora powoduje, że środowisko wykonawcze Guice szuka wartości dla każdego parametru na podstawie zdefiniowanych wtryskiwaczy.@Inject
Adnotacja byłoby dość trudne do powtórzenia przy użyciu plików konfiguracyjnych XML, a jego bliskość do konstruktora jest wykorzystywana do jest bardzo przydatne (wyobrazić konieczności wyszukiwania do ogromnego pliku XML znaleźć wszystkie wstrzykiwanie zależności zostały ustawione).Mam nadzieję, że dałem wam przedsmak tego, jak adnotacje są używane w różnych ramach.
źródło
Adnotacje w Javie stanowią sposób na opisanie klas, pól i metod. Zasadniczo są one formą metadanych dodawanych do pliku źródłowego Java, nie mogą bezpośrednio wpływać na semantykę programu. Jednak adnotacje można odczytać w czasie wykonywania za pomocą Reflection, a proces ten nosi nazwę introspekcji. Następnie można go użyć do modyfikacji klas, pól lub metod.
Ta funkcja jest często wykorzystywana przez biblioteki i zestawy SDK (hibernacja, JUnit, Spring Framework) w celu uproszczenia lub zmniejszenia ilości kodu, który programista by zrobił, chyba że zrobiłby to inaczej, aby pracować z tymi bibliotekami lub zestawami SDK. Dlatego słusznie jest powiedzieć Adnotacje i Odbicie działa ręka w rękę w Javie.
Możemy również ograniczyć dostępność adnotacji do czasu kompilacji lub środowiska wykonawczego. Poniżej znajduje się prosty przykład tworzenia niestandardowej adnotacji
Driver.java
TestAlpha.java
IssueInfo.java
źródło
Nie do końca, ale konfiguracja, która ściśle odpowiada strukturom kodu (takim jak odwzorowania JPA lub wstrzykiwanie zależności na wiosnę), często może być zastąpiona adnotacjami, a wtedy jest zwykle znacznie mniej szczegółowa, denerwująca i bolesna. Prawie wszystkie znaczące frameworki dokonały tego przełączenia, chociaż stara konfiguracja XML zwykle pozostaje opcją.
źródło
Istnieją 2 widoki adnotacji
widok użytkownika przez większość czasu adnotacje działają jak skrót, pozwalają zaoszczędzić kilka naciśnięć klawiszy lub sprawiają, że program jest bardziej czytelny
widok dostawcy, procesorowy opis adnotacji jest raczej lekkim „interfejsem”, twój program MUSI skonfrontować się z COŚ, ale bez wyraźnego „implementowania” określonego interfejsu (tutaj aka adnotacja)
np. w jpa definiujesz coś podobnego
zamiast
oboje mówią to samo „Foo jest klasą Entity”
źródło
Gdzie można używać adnotacji
Aktualizacja Java SE 8: adnotacje można również zastosować do użycia typów. Oto kilka przykładów:
Wyrażenie tworzenia instancji klasy:
new @Interned MyObject ();
Typ obsady:
myString = (@NonNull String) str;
implementuje klauzulę:
klasa UnmodifiableList implementuje @Readonly List <@Readonly T> {...}
Zgłoszona wyjątek:
void monitorTemperature () zgłasza @Critical TemperatureException {...}
źródło
Szkielety takie jak Hibernacja, w których wymagane jest wiele konfiguracji / mapowania, mocno wykorzystują Adnotacje.
Spójrz na adnotacje hibernacji
źródło
JPA (z Java EE 5) jest doskonałym przykładem (nad) korzystania z adnotacji. Java EE 6 wprowadzi także adnotacje w wielu nowych obszarach, takich jak usługi sieciowe RESTful i nowe adnotacje dla każdego starego, dobrego API Servleta.
Oto kilka zasobów:
Adnotacje przejmują nie tylko specyfikę konfiguracji, ale mogą też służyć do kontrolowania zachowania. Widzisz to dobrze w przykładach JAX-RS Java EE 6.
źródło
Jest przydatny do opisywania klas, na poziomie metody, klasy lub pola, czegoś o tej klasie, co nie jest całkiem związane z klasą.
Możesz mieć własne adnotacje, używane do oznaczania niektórych klas tylko do użytku testowego. Może to być po prostu do celów dokumentacyjnych lub można go wymusić, odfiltrowując go podczas kompilacji kandydata do wydania produkcyjnego.
Możesz użyć adnotacji do przechowywania niektórych metadanych, na przykład w ramach wtyczki, np. Nazwy wtyczki.
To tylko kolejne narzędzie, ma wiele celów.
źródło
Dołącza dodatkowe informacje o kodzie poprzez (a) sprawdzenie kompilatora lub (b) analizę kodu
**
**
Typ 1) Adnotacje zastosowane do kodu Java:
Typ 2) Adnotacje stosowane do innych adnotacji:
**
** http://en.wikipedia.org/wiki/Java_annotation#Custom_annotations
ABY LEPSZE ZROZUMIEĆ WYPRÓBUJ PONIŻEJ LINK: OPRACUJ PRZYKŁADY
http://www.javabeat.net/2007/08/annotations-in-java-5-0/
źródło
Adnotacje mogą być używane jako alternatywa dla zewnętrznych plików konfiguracyjnych, ale nie mogą być uważane za całkowitą zamianę. Można znaleźć wiele przykładów, w których do zamiany plików konfiguracyjnych użyto adnotacji, takich jak Hibernate, JPA, EJB 3 i prawie wszystkie technologie zawarte w Javie EE.
W każdym razie nie zawsze jest to dobry wybór. Używanie plików konfiguracyjnych ma zwykle na celu oddzielenie kodu od szczegółów środowiska, w którym aplikacja jest uruchomiona. W takich sytuacjach, a głównie gdy konfiguracja jest używana do mapowania aplikacji do struktury systemu zewnętrznego, adnotacje nie są dobrym zamiennikiem pliku konfiguracyjnego, ponieważ zawierają szczegółowe informacje o systemie zewnętrznym w kodzie źródłowym Twoje zgłoszenie. Tutaj pliki zewnętrzne należy uznać za najlepszy wybór, w przeciwnym razie będziesz musiał zmodyfikować kod źródłowy i ponownie skompilować za każdym razem, gdy zmienisz odpowiedni szczegół w środowisku wykonawczym.
Adnotacje są znacznie bardziej przydatne do ozdabiania kodu źródłowego dodatkowymi informacjami, które instruują narzędzia przetwarzania, zarówno w czasie kompilacji, jak i w czasie wykonywania, w celu specjalnego obsługiwania klas i struktur klas.
@Override
a JUnit@Test
to dobre przykłady takiego użycia, wyjaśnione szczegółowo w innych odpowiedziach.W końcu zasada jest zawsze taka sama: trzymaj w źródle rzeczy, które zmieniają się wraz ze źródłem, i trzymaj poza źródłem rzeczy, które zmieniają się niezależnie od źródła.
źródło
Java EE 5 preferuje stosowanie adnotacji zamiast konfiguracji XML. Na przykład w EJB3 atrybuty transakcji w metodzie EJB są określane za pomocą adnotacji. Używają nawet adnotacji, aby oznaczyć POJO jako EJB i określić konkretne metody jako metody cyklu życia, zamiast wymagać implementacji interfejsu.
źródło
Adnotacja Java ma na celu jedynie powiązanie informacji z elementem programu z adnotacjami. Adnotacje Java mogą być używane jako modyfikatory w dowolnej deklaracji, niezależnie od tego, czy pakiet, klasa (w tym wyliczenia), interfejs (w tym typy adnotacji), pole, metoda, parametr formalny, konstruktor czy zmienna lokalna.
Adnotacje Java mogą być również używane w przypadku stałych wyliczeniowych. Takie adnotacje są umieszczane bezpośrednio przed stałą wyliczania, którą adnotują. Adnotacje Java są tradycyjnie umieszczane przed wszystkimi innymi modyfikatorami, ale nie jest to wymagane; mogą być dowolnie mieszane z innymi modyfikatorami.
Przeczytaj szczegółowo o Adnotacjach Java .
źródło
Oto niektóre z miejsc, w których można używać adnotacji.
Możesz polecić ten link aby uzyskać więcej informacji na temat adnotacji.
Możesz skorzystać z tego linku, aby zobaczyć, w jaki sposób adnotacje są używane do budowy prostego pakietu testowego.
źródło