Как и где Аннотации используются в Java?

Необходимо быть корнем, чтобы смочь создать каталог в/.

Поэтому, если у Вас есть sudo, установил Вас, может просто тип sudo mkdir /<yourdir> и изменять полномочия впоследствии с, например, sudo chown $USER:$USER /<yourdir>. Если у Вас нет sudo, установил Вас, должны войти в систему как корень (тип su в терминале) и выполнить команды без предыдущего sudo.

, Если я понял Вас правильно, Вы попробовали для изменения владения корневой файловой системы. Не делайте этого!

202
задан Michael Easter 11 December 2009 в 18:27
поделиться

10 ответов

Аннотации - это мета-мета-объекты , которые могут использоваться для описания других мета-объектов . Мета-объекты - это классы, поля и методы. Запрос объекта на предмет его мета-объекта (например, anObj.getClass () ) называется интроспекцией . Самоанализ может пойти дальше, и мы можем спросить мета-объект, каковы его аннотации (например, aClass.getAnnotations ). Самоанализ и аннотации относятся к тому, что называется отражением и метапрограммированием .

Чтобы аннотация была полезной, ее нужно так или иначе интерпретировать. Аннотации могут интерпретироваться во время разработки IDE или компилятором, или во время выполнения фреймворком.

Обработка аннотаций - это очень мощный механизм, который можно использовать множеством различных способов:

  • для описания ограничений или использования элемента: например, @Deprecated, @Override , или @NotNull
  • для описания «природы» элемента, например @Entity, @TestCase, @WebService
  • для описания поведения элемента: @Statefull, @Transaction
  • , чтобы описать, как обрабатывать элемент: @Column, @XmlElement

Во всех случаях аннотация используется для описания элемента и уточнения его значения .

До JDK5 информацию, которая теперь выражается с помощью аннотаций, нужно было хранить где-то еще, и часто использовались файлы XML. Но удобнее использовать аннотации, потому что они будут принадлежать самому коду Java, и, следовательно, ими гораздо легче манипулировать, чем XML.

Использование аннотаций:

  • Документация, например XDoclet
  • Компиляция
  • IDE
  • Среда тестирования, например JUnit
  • Контейнер IoC, например
298
ответ дан 23 November 2019 в 05:00
поделиться

Есть несколько приложений для аннотаций Java. Прежде всего, они могут использоваться компилятором (или расширениями компилятора). Рассмотрим, например, аннотацию Override :

class Foo {

    @Override public boolean equals(Object other) {
        return ...;
    }
}

Фактически она встроена в Java JDK. Компилятор сообщит об ошибке, если им помечен какой-либо метод, который не переопределяет метод, унаследованный от базового класса. Эта аннотация может быть полезной, чтобы избежать распространенной ошибки, когда вы действительно намереваетесь переопределить метод, но не можете этого сделать, потому что подпись, указанная в вашем методе, не соответствует подписи переопределяемого метода:

class Foo {

    @Override public boolean equals(Foo other) {  // Compiler signals an error for this one
        return ...;
    }
}

грядущий JDK7 позволит делать аннотации любого типа. Уже есть предложения использовать эту функцию для аннотаций компилятора, таких как NotNull , например:

public void processSomething(@NotNull String text) {
    ...
}

, что может позволить компилятору предупреждать вас о неправильном / неконтролируемом использовании переменных и нулевых значений.

Другое, более продвинутое приложение для аннотаций включает отражение и обработку аннотаций во время выполнения. Это (я думаю) то, что вы имели в виду, когда говорили об аннотациях как «замене конфигурации на основе XML». Это вид обработки аннотаций, используемый, например, различными фреймворками и стандартами JCP (постоянство, внедрение зависимостей, вы называете это) для предоставления необходимых метаданных и информации о конфигурации.

Это (я думаю) то, что вы имели в виду, когда говорили об аннотациях как «замене конфигурации на основе XML». Это вид обработки аннотаций, который используется, например, различными фреймворками и стандартами JCP (постоянство, внедрение зависимостей, вы называете это) для предоставления необходимых метаданных и информации о конфигурации.

Это (я думаю) то, что вы имели в виду, когда говорили об аннотациях как «замене конфигурации на основе XML». Это вид обработки аннотаций, который используется, например, различными фреймворками и стандартами JCP (постоянство, внедрение зависимостей, вы называете это) для предоставления необходимых метаданных и информации о конфигурации.

46
ответ дан 23 November 2019 в 05:00
поделиться

Java EE 5 отдает предпочтение использованию аннотаций по сравнению с конфигурацией XML. Например, в EJB3 атрибуты транзакции в методе EJB указываются с помощью аннотаций. Они даже используют аннотации, чтобы пометить POJO как EJB и указать определенные методы как методы жизненного цикла вместо того, чтобы требовать эту реализацию интерфейса.

0
ответ дан 23 November 2019 в 05:00
поделиться

Является ли это заменой XML на основе конфигурация?

Не полностью, но конфигурация, которая близко соответствует структурам кода (например, сопоставления JPA или внедрение зависимостей в Spring), часто может быть заменена аннотациями, и тогда она обычно намного менее подробна, раздражает и болезненна. Практически все известные фреймворки сделали этот переход, хотя старая конфигурация XML обычно остается в качестве опции.

6
ответ дан 23 November 2019 в 05:00
поделиться

Это полезно для аннотирования ваших классов на уровне метода, класса или поля, что-то в этом классе, что не совсем связано с классом.

У вас могут быть свои собственные аннотации, которые используются для обозначения определенных классов только для тестового использования. Это может быть просто для целей документации, или вы можете применить его, отфильтровав его во время компиляции кандидата на производственную версию.

Вы можете использовать аннотации для хранения некоторых метаданных, например, в структуре плагина, например, имя plugin.

Это просто еще один инструмент, у него много целей.

1
ответ дан 23 November 2019 в 05:00
поделиться

Аннотации - это форма метаданных (данные о данных ) добавлен в исходный файл Java. Они в основном используются фреймворками для упрощения интеграции клиентского кода. Пара примеров из реального мира, которые мне не очень нравятся:

  • JUnit 4 - вы добавляете аннотацию @Test к каждому методу тестирования, который должен запускать бегун JUnit. Есть также дополнительные аннотации по настройке тестирования (например, @Before и @BeforeClass ). Все это обрабатывается бегуном JUnit, который соответственно запускает тесты. Можно сказать, что это замена конфигурации XML, но аннотации иногда бывают более мощными (например, они могут использовать отражение), а также они ближе к коду, на который они ссылаются (аннотация @Test верна перед методом тестирования, поэтому цель этого метода ясна - также служит документацией). С другой стороны, конфигурация XML может быть более сложной и включать в себя гораздо больше данных, чем могут быть аннотации.

  • Terracotta - использует как аннотации, так и файлы конфигурации XML. Например, аннотация @Root сообщает среде выполнения Terracotta, что аннотированное поле является корневым и его память должна совместно использоваться экземплярами виртуальных машин. Файл конфигурации XML используется для настройки сервера и указания ему, какие классы использовать.

  • Google Guice - примером может служить аннотация @Inject , которая при применении к конструктору заставляет среду выполнения Guice выглядеть для значений для каждого параметра на основе определенных форсунок. Аннотацию @Inject будет довольно сложно воспроизвести с использованием файлов конфигурации XML, а ее близость к конструктору, на который она ссылается, весьма полезна (представьте, что вам нужно искать в огромном файле XML, чтобы найти все инъекции зависимостей, которые вы настроили).

Надеюсь, я дал вам представление о том, как аннотации используются в различных средах.

Файл конфигурации XML используется для настройки сервера и указания ему, какие классы использовать.

  • Google Guice - примером может служить аннотация @Inject , которая при применении к конструктору заставляет среду выполнения Guice выглядеть для значений для каждого параметра на основе определенных форсунок. Аннотацию @Inject будет довольно сложно воспроизвести с использованием файлов конфигурации XML, а ее близость к конструктору, на который она ссылается, весьма полезна (представьте, что вам нужно искать в огромном файле XML, чтобы найти все инъекции зависимостей, которые вы настроили).

  • Надеюсь, я дал вам представление о том, как аннотации используются в различных средах.

    Файл конфигурации XML используется для настройки сервера и указания ему, какие классы использовать.

  • Google Guice - примером может служить аннотация @Inject , которая при применении к конструктору заставляет среду выполнения Guice выглядеть для значений для каждого параметра на основе определенных форсунок. Аннотацию @Inject будет довольно сложно воспроизвести с использованием файлов конфигурации XML, а ее близость к конструктору, на который она ссылается, весьма полезна (представьте, что вам нужно искать в огромном файле XML, чтобы найти все инъекции зависимостей, которые вы настроили).

  • Надеюсь, я дал вам представление о том, как аннотации используются в различных средах.

    который при применении к конструктору заставляет среду выполнения Guice искать значения для каждого параметра на основе определенных инжекторов. Аннотацию @Inject будет довольно сложно воспроизвести с использованием файлов конфигурации XML, а ее близость к конструктору, на который она ссылается, весьма полезна (представьте, что вам нужно искать в огромном файле XML, чтобы найти все инъекции зависимостей, которые вы настроили).

    Надеюсь, я дал вам представление о том, как аннотации используются в различных средах.

    который при применении к конструктору заставляет среду выполнения Guice искать значения для каждого параметра на основе определенных инжекторов. Аннотацию @Inject будет довольно сложно воспроизвести с использованием файлов конфигурации XML, а ее близость к конструктору, на который она ссылается, весьма полезна (представьте, что вам нужно искать в огромном файле XML, чтобы найти все инъекции зависимостей, которые вы настроили).

    Надеюсь, я дал вам представление о том, как аннотации используются в различных средах.

    и его близость к конструктору, на который он ссылается, весьма полезна (представьте, что вам нужно искать в огромном XML-файле, чтобы найти все установленные вами инъекции зависимостей).

    Надеюсь, я дал вам представление о том, как используются аннотации в разных рамках.

    и его близость к конструктору, на который он ссылается, весьма полезна (представьте, что вам нужно искать в огромном XML-файле, чтобы найти все установленные вами инъекции зависимостей).

    Надеюсь, я дал вам представление о том, как используются аннотации в разных рамках.

    17
    ответ дан 23 November 2019 в 05:00
    поделиться

    JPA (из Java EE 5) - отличный пример (чрезмерного) использования аннотаций. Java EE 6 также представит аннотации во многих новых областях, таких как веб-службы RESTful и новые аннотации для каждого старого доброго Servlet API.

    Вот несколько ресурсов:

    В аннотации могут быть переданы не только особенности конфигурации, но и используется для управления поведением. Вы видите это хорошее в примерах JAX-RS для Java EE 6.

    2
    ответ дан 23 November 2019 в 05:00
    поделиться

    Фреймворки, такие как Hibernate, где требуется множество настроек / сопоставлений, активно используют аннотации.

    Взгляните на Hibernate Annotations

    2
    ответ дан 23 November 2019 в 05:00
    поделиться

    Аннотации могут использоваться как альтернатива внешним файлам конфигурации, но не могут считаться полной заменой. Вы можете найти множество примеров, когда аннотации использовались для замены файлов конфигурации, таких как Hibernate, JPA, EJB 3 и почти всех технологий, включенных в Java EE.

    В любом случае это не всегда хороший выбор. Целью использования файлов конфигурации обычно является отделение кода от деталей среды, в которой выполняется приложение. В таких ситуациях, и в большинстве случаев, когда конфигурация используется для сопоставления приложения со структурой внешней системы, аннотации не являются хорошей заменой файла конфигурации, так как они позволяют вам включать детали внешней системы в исходный код ваше приложение. Здесь лучше всего подходят внешние файлы, в противном случае вам нужно будет изменять исходный код и перекомпилировать каждый раз, когда вы меняете соответствующую деталь в среде выполнения.

    Аннотации гораздо больше подходят для украшения исходного кода дополнительной информацией, которая инструктирует инструменты обработки, как во время компиляции, так и во время выполнения, обрабатывать классы и структуры классов особым образом. @Override и JUnit @Test являются хорошими примерами такого использования, которые уже подробно объяснялись в других ответах.

    В конце концов, правило всегда одно и то же: хранить внутри источник вещей, которые изменяются вместе с источником, и держите вне источника то, что изменяется независимо от источника.

    Аннотации гораздо больше подходят для украшения исходного кода дополнительной информацией, которая инструктирует инструменты обработки, как во время компиляции, так и во время выполнения, обрабатывать классы и структуры классов особым образом. @Override и JUnit @Test являются хорошими примерами такого использования, которые уже подробно объяснялись в других ответах.

    В конце концов, правило всегда одно: держите внутри источник вещей, которые изменяются вместе с источником, и держите вне источника то, что изменяется независимо от источника.

    Аннотации гораздо больше подходят для украшения исходного кода дополнительной информацией, которая инструктирует инструменты обработки, как во время компиляции, так и во время выполнения, обрабатывать классы и структуры классов особым образом. @Override и JUnit @Test являются хорошими примерами такого использования, которые уже подробно объяснялись в других ответах.

    В конце концов, правило всегда одно и то же: хранить внутри источник вещей, которые изменяются вместе с источником, и держите вне источника то, что изменяется независимо от источника.

    0
    ответ дан 23 November 2019 в 05:00
    поделиться

    Существует 2 вида аннотаций

    1. вид пользователя, в большинстве случаев аннотации работают как ярлык, экономят несколько нажатий клавиш, или делают вашу программу более читабельной

    2. вид производителя, вид аннотации процессора более легковесный "интерфейс", ваша программа ДОБАЕТСЯ противостоять SOMETHING, но без явного "реализует" конкретный интерфейс (здесь он же аннотация)

    e. g. В jpa вы определяете что-то вроде

    @Entity class Foo {...}
    

    вместо

    class Foo implements Entity {...}
    

    , оба говорят одно и то же "Foo - это класс Entity"

    .
    6
    ответ дан 23 November 2019 в 05:00
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: