• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gdzie znajduje się implementacja adnotacji w Javie ?

Object Storage Arubacloud
+1 głos
242 wizyt
pytanie zadane 25 września 2018 w Java przez BuxBleed Użytkownik (810 p.)

Cześć, mam problem ze zrozumieniem działania adnotacji, chodzi o to gdzie znajduje się ich implementacja ? Przykładowa adnotacja @Component ze Springa, jak wiecie sprawia że klasa jest zarządzalna przez kontekst Springa.   

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component {
    String value() default "";
}

Gdzie jest jej ciało ( implementacja ), kod który sie wykonuje kiedy coś nią oznaczymy ? Nie ogarniam tego... w firmie mam podobną sytuację tylko ludzie definiują własne adnotacje i wyglądają identycznie, nie ma żadnej implementacji żeby dowiedzieć się do czego służy dana adnotacja i co robi...

komentarz 25 września 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Adnotacjia jest specyficznym rodzajem interfejsu. Sama w sobie nie posiada implementacji.
Dopiero dalej jest jakaś klasa co np. pobiera wszystkie klasy z adnotacją Component i je wstrzykuje do kontekstu
komentarz 25 września 2018 przez BuxBleed Użytkownik (810 p.)
Da się jakoś w kodzie odnaleźć to miejsce ? To odbywa się przez refleksje ? Bo skąd ta klasa która pobiera wszystkie elementy z adnotacją ma niby wiedzieć jakiego typu jest ta moja adnotowana klasa?
komentarz 25 września 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Rożnie bywa zależy od tego jak jest wykorzystywana. Możesz przeszukać projekt pod kontem adnotacji w intelij ctr + klik na nazwe klasy.
1
komentarz 25 września 2018 przez BuxBleed Użytkownik (810 p.)
Mam Intelijj no ale jeśli jest to robione przez refleksję to ten Twój patent nie zadziała...
1
komentarz 25 września 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Wydaje mi się że jeśli gdzieś w projekcie jest użyte np isAnnotationPresent(Annotacja.class) to powinno znaleźć.
komentarz 25 września 2018 przez BuxBleed Użytkownik (810 p.)
Gorzej jeśli projekt ma kilkaset tysięcy linijek i wiele customowych adnotacji stworzonych przez developerów :P

1 odpowiedź

+1 głos
odpowiedź 25 września 2018 przez mbabane Szeryf (79,280 p.)
wybrane 28 września 2018 przez BuxBleed
 
Najlepsza

Adnotacja to taki znacznik, który wykorzystywany jest głownie do narzędzi/frameworków w celu dokonania jakiś określonych operacji na oznaczonym elemencie. Atutem adnotacji jest to że jeśli dany element jest nią oznaczony to nie wpływa to bezpośrednio na działanie tego czegoś. Dobrym przykładem może być JPA. Stosując JPA oznacza się elementy adnotacjami, a mechanizmy implementujące JPA wykorzystują to do zmapowania javy do SQL i odwrotnie, ale z klasy encji nadal można korzystać w standardowy dla języka Java sposób:

@Entity
class SomeClass
{
       @Id
       private Integer id;
       private String field;

       //settery gettery
}

//nie ma problemu żeby użyć tej klasy w zwyczajny sposób:
SomeClass sc = new SomeClass();
sc.setId(12);

Z programistycznego punktu widzenia adnotacje mają trzy zakresy działań: SOURCE (dostęp do adnotacji jest z poziomu kodu i nie są one dołączane do klasy w procesie kompilacji), CLASS (to służy do jakiś niskopoziomowych zagadnień, w których się nie orientuję), i trzeci zakres to RUNTIME (za pomocą tego typu można przetwarzać adnotacje za pomocą API refleksji).

komentarz 26 września 2018 przez KubenQPL Maniak (62,820 p.)
Adnotacje służą jako "znaczniki" na podstawie których jest generowany dodatkowy kod w klasiektóry można gdzieś tam zobaczyć w folderze "build" lub "generated"
komentarz 26 września 2018 przez mbabane Szeryf (79,280 p.)
Niekoniecznie bo API refleksji nie generuje kodu.

A jeśli korzysta się z adnotacji SOURCE to kod nie jest dopisywany do klasy, tylko generowany jest nowy plik.

Podobne pytania

0 głosów
1 odpowiedź 262 wizyt
pytanie zadane 14 lipca 2019 w Sprawy forum przez qwiateq Początkujący (430 p.)
0 głosów
2 odpowiedzi 226 wizyt
0 głosów
1 odpowiedź 401 wizyt
pytanie zadane 12 lipca 2017 w Java przez Kodoj Nowicjusz (120 p.)

92,565 zapytań

141,416 odpowiedzi

319,599 komentarzy

61,950 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...