Может aspectj добавить методы к java.lang.String - PullRequest
6 голосов
/ 02 июля 2011

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

Могут ли aspectj добавить методы в java.lang.String?

или аналогичный вопрос:Если я не могу получить источники некоторых классов, могу ли я улучшить их с помощью aspectj?

Ответы [ 3 ]

8 голосов
/ 27 августа 2012

Я просто искал что-то еще и наткнулся на этот вопрос.Я хочу отметить, что ответ Коусера, хотя он и был принят, несколько неверен.Вопрос не упоминает никаких ограничений для LTW, поэтому CTW все еще в гонке.На следующем шаге можно сплести файлы классов JDK / JRE, а затем добавить рекомендованные классы к пути к загрузочному классу.Я делал это раньше (даже в точности так, как было задано, т.е. объявлял новый метод в String), и он работает без проблем.

6 голосов
/ 09 июля 2011

Нет, вы не можете сделать это, мой друг.

Я думаю, это то, что вы ищете Тип не доступен пользователю

Для получения более подробной информации, пожалуйста,взгляните на Руководство по среде разработки AspectJ # Особые случаи

Как говорится

Следующие классы не предоставляются инфраструктуре LTW независимо от aopИспользуемые XML-файл (ы)

  • Все классы org.aspectj. * (и подпакеты) - так как они необходимы самой инфраструктуре
  • Все java. * иjavax. * классы (и подпакеты)
  • Все классы sun.reflect. * - так как это специфические JDK-классы, используемые при вызовах с отражением
4 голосов
/ 02 июля 2011

Я ни в коем случае не эксперт по аспектам, но я полагаю, что вы можете сделать обе эти вещи.

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

AspectJ выполняет свою работу путем манипулирования байт-кодом, поэтому вам не нужен доступ к исходным классам, которые вы используете.изменяющее.

...