Хотя я не знаю точно, я бы предположил, что у Scopes обязательно есть сохранение во время выполнения, потому что JSR 330's @Scope
требует, чтобы облавы имели время хранения во время выполнения. ( @Qualifier
имеет такое же ограничение.) Оба Dagger 1 и Dagger 2 рекламируют совместимость JSR-330, и (как упоминает David в комментариях) существует много времени выполнения которые должны были бы абсолютно требовать аннотации аннотаций, сохраненных во время выполнения.
Для кинжала, в частности, я не могу себе представить, почему они действительно будут прочитаны во время выполнения, хотя я полагаю, что некоторые внешние библиотеки могут использовать аннотации.
Это не обязательно проблема, унаследованное или иное: многие системы DI настраиваются во время выполнения и требуют аннотации. Кинжал примечателен тем, что он этого не делает, но спецификация не была написана таким образом, чтобы удержание времени исполнения было необязательным. Это освобождает разработчиков приложений вместо Dagger с другой структурой JSR330, такой как Guice или Spring, и освобождает разработчиков библиотек, чтобы сделать совместимые с DI-совместимыми инструментами или фреймворками агностики, независимо от того, настроены ли они во время компиляции или настройки времени выполнения. Эта спецификация (т. Е. Без вариантов реализации) и гибкость (время компиляции или время выполнения), по-видимому, стоят затрат на ненужное сохранение аннотации и стоимость обучения.
Однако этот может проблема в крупных приложениях для Android, потому что Android по умолчанию по умолчанию сохраняет аннотированные классы в главном дескрипторе ; более старые версии Android не загружают аннотации времени выполнения, если аннотированный класс находится во вторичном dex. Подробнее см. В эту ошибку , связанную с keepRuntimeAnnotatedClasses
docs . Хотя вы могли бы рассмотреть эту проблему с кинжалом из-за применимости Dagger к большим приложениям для Android, это скорее ошибка с обработкой аннотаций Android, для которой Кинжал должен будет расходиться с спецификацией JSR-330, чтобы справиться с ней.
Вот решение, если вы хотите запретить строки запроса:
Disallow: /*?*
или если вы хотите уточнить строку запроса:
Disallow: /*?dir=*&order=*&p=*
Вы также можете добавьте к robots.txt, который url разрешить
Allow: /new-printer$
$
будет следить за тем, чтобы разрешить /new-printer
.
Дополнительная информация:
http://code.google.com/web/controlcrawlindex/docs/robots_txt.html
http: // sanzon.wordpress.com/2008/04/29/advanced-usage-of-robotstxt-w-querystrings/
Вы можете заблокировать эти конкретные параметры строки запроса со следующими строками
Disallow: /*?*dir=
Disallow: /*?*order=
Disallow: /*?*p=
Поэтому, если какой-либо URL содержит dir=
, order=
или p=
где угодно в строке запроса он будет заблокирован.
Зарегистрируйте свой сайт с помощью инструментов Google WebMaster.
Конфигурация сайта -> Параметры URL
Вы должны иметь страницы, содержащие эти параметры, которые указывают, что они должны быть исключены из индексации через метатег роботов. например
/new-printer
, но не/new-printers?dir=*&order=*&p=*?
? – Book Of Zeus 5 February 2012 в 17:05