• 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 ?

+1 głos
560 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,240 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,840 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,240 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ź 402 wizyt
pytanie zadane 14 lipca 2019 w Sprawy forum przez qwiateq Początkujący (430 p.)
0 głosów
2 odpowiedzi 780 wizyt
0 głosów
1 odpowiedź 604 wizyt
pytanie zadane 12 lipca 2017 w Java przez Kodoj Nowicjusz (120 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,372 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...