Adnotacja na poziomie metody całkowicie zastępuje adnotację na poziomie typu. Jakakolwiek hierarchia nie jest tutaj możliwa. Pozwól mi wyjaśnić trochę więcej. Nie ma możliwości sprawdzenia, czy określona została wartość dla użytkownika dla określonego atrybutu, lub jeśli zwracana jest wartość default
po odczytaniu atrybutów adnotacji. Tak więc, Spring
lub ktokolwiek inny, nie może określić, czy określony atrybut został nadpisany lub czy używana jest wartość domyślna. Tak więc nie ma sposobu na podjęcie decyzji na podstawie obecności lub braku atrybutu. Z tego powodu za każdym razem, gdy zastępujesz jakąkolwiek adnotację (tj. Określasz ją z dokładniejszą szczegółowością), musisz podać wszystkie wymagane atrybuty. Tak więc, w twoim przypadku, Isolation.DEFAULT
zostanie zastosowany jako .
Jednak, na marginesie, załóżmy, że masz własną niestandardową adnotację, która określa pusty ciąg jako wartość domyślną dla jakiegoś atrybutu. W takim przypadku, jeśli adnotacja na poziomie klasy określa niepusty łańcuch dla tego atrybutu, a adnotacja na poziomie metody nie określa żadnej wartości (a zatem używa wartości domyślnej: pustego ciągu znaków), można uzyskać należy użyć wartości atrybutu z adnotacji na poziomie klasy. To znaczy, nie zezwalając na wartość domyślną w adnotacji na poziomie metody, aby przesłonić podaną przez użytkownika wartość określoną przez użytkownika na na poziomie klasy. W każdym takim scenariuszu należy upewnić się, że wartość domyślna nie reprezentuje prawidłowej wartości atrybutu. W przypadku adnotacji @Transactional
, reprezentuje poprawną wartość i może być jawnie określona przez użytkownika.
Dobra odpowiedź, zwłaszcza drugi akapit dotyczący niestandardowych adnotacji i wartości domyślnych. –