Предыдущая статья Введение аннотаций Java объясняет основное использование аннотаций Java и реализует простой тестовый инструмент с помощью пользовательских аннотаций; В этой статье будет представлена то, как использовать AOP Spring Boot для упрощения обработки пользовательских аннотаций, и объяснит это содержимое, внедряя простой инструмент статистики времени выполнения метода в качестве примеров.
AOP Concept
Программирование, ориентированное на аспект (AOP, также переводится как ориентированное на аспект программирование, ориентированное на перспективу программирование и разделовое программирование), является термином в области компьютерных наук, относящихся к парадигме программирования. Эта парадигма основана на языковой конструкции, называемой аспектом, который является новым модульным механизмом для описания проблем с перекрестной перекрытием, разбросанными по объектам, классам или функциям.
Концепция стороны происходит от улучшений в объектно-ориентированном программировании, но не ограничивается этим, ее также можно использовать для улучшения традиционных функций. Концепции программирования, связанные с стороной, также включают в себя протоколы мета-объектов, субъекты, микшины и делегирование.
Примечание. Приведенное выше определение поступает из китайской Википедии (если вы не можете получить к нему доступ, вы можете получить к нему доступ, изменяя файл хостов системы. 198.35.26.96 zh.wikipedia.org #Chinese Wikipedia, которая может помочь только в этом. Если вы все еще не можете получить к нему доступ, пожалуйста, поищите онлайн, чтобы искать, как изменить систему, введенный в системе, в системе, в рамках отдельных системных файлов. Расскажите напрямую. Перевод слова AOP немного непоследователен с основным именем в Китае. Основным внутренним переводом AOP является «ориентированное на лицо программирование». Не придерживайтесь имени, просто знайте, что оно относится к тому же.
Я думаю, вы смущены после прочтения этого определения. Если вы хотите получить более глубокое понимание, вы можете пойти в Чжиху, чтобы увидеть, как крупные парни спорят о том, что такое AOP для ориентированного программирования? Полем Мне лучше просто взять пример здесь.
Подготовка среды AOP Spring Boot
Введите соответствующие модули зависимости в pom.xml
<!-Пакет зависимости для загрузки Spring-> <parent> <groupid> org.springframework.boot </GroupId> <artifactid> pring-boot-starter-parent </artifactid> <seriate> 1.5.1.Release </version> </parent> <зависимости> <!-AOP-зависимость Module-> <Deginency> <groupD> org.springFringFringFringFringFr <Artifactid> Spring-boot-starter-aop </artifactid> </vehyederian> <!-Модуль веб-зависимости-> <Depective> <groupId> org.springframework.boot </GroupId> <Artifactid> Spring-boot-starter-web </artifactid> </jepertice> </repect>
Сначала реализовать простую обработку веб -запросов
Простой контроллер для обработки веб -запросов.
Пакет com.craneyuan.controller; import com.craneyuan.service.ihelloworldservice; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.web.bindtation.Requestmapping; import.springframework.web.nannation.Reb org.springframework.web.bind.annotation.restcontroller; @RestControllerPublic Class HelloworldController {@Autowired Private iHelloworLdService HelloworLdService; @Requestmapping (value = "/hello", method = requestmethod.get) public String hello (string name) {return helloworldservice.gethellomessage (name); }}Я не буду показывать код для простого класса реализации услуг Helloworld.
Пакет com.craneyuan.service.impl; import com.craneyuan.annotation.analisisActuator; import com.craneyuan.service.ihelloorldservice; импорт org.springframework.beans.factory.annotation.value; импорт org.spramework.serseplie.service; java.util.optional; @servicepublic class helloworldserviceimpl реализует ihelloworldservice {public String gethellomessage (String name) {return «hello» + optional.ofnullable (name) .orelse («мир!»); }}Такой простой веб -сервис готов. Вы можете запустить проект и позвонить в команду Curl, например: curl -xget -i "http://127.0.0.1:8080/hello?name=java". Если все пойдет хорошо, вы получите ответ, подобный следующему:
Http/1,1 200-контента-типа: текст/plain; charset = utf-8content-kength: 11date: thu, 11 января 2018 09:45:38 Gmthello java
Используйте пользовательские аннотации, чтобы подсчитать время выполнения метода
Сначала определите аннотацию, используемую для подсчета времени выполнения метода.
Пакет com.craneyuan.annotation; импорт java.lang.annotation.elementtype; импорт java.lang.annotation.retention; import java.lang.annotation.retentionpolicy; импорт java.lang.annotation.target; @Target (elementTyPe.Method) String note () default "";}
Затем определите раздел, чтобы обрабатывать только что определенную вами аннотацию.
пакет com.craneyuan.aspect; import com.craneyuan.annotation.analysisActuator; импорт org.aspectj.lang.joinpoint; импорт org.aspectj.lang.annotation.aspect; импорт org.aspectj.lang.annotation.before; импорт org.aspectj.lang.annotation.pointcut. org.slf4j.loggerfactory; import org.springframework.core.annotation.order; import org.springframework.stereotype.component;@asment@componentpublic class AnalyseuatorAtorAspect {окончательный статический логист log = loggerfactory.getlogger (analysuatorAspect.class); Threadlocal <long> begintime = new Threadlocal <> (); @Pointcut (" @annotation (AnalysisActUator)") public void serviceStatistics (AnalysActuator AnalysisActUator) {} @before ("ServiceStatistics (AnalysActUator)") Публичный void dobefore (JoinPoint JoinPoint, AnalysisActUator AnalysisActUator) {// Записывать время прибытия запроса (System.SERRETTIMLITUTURTIATUR) {// Записывать время прибытия запроса log.info ("cy666 Примечание: {}", AnalyseActUator.note ()); } @After ("ServiceStatistics (AnalysActUator)") public void doafter (AnalysActUator AnalysisActUator) {log.Info ("Cy666 Статистическое время: {}, примечание: {}", System.currentTimeMillis () - begintime.get (), analyseActUator.note ()); }}Наконец, просто добавьте аннотацию @AnalysisActuator к методу, который должен подсчитать время выполнения.
Пакет com.craneyuan.service.impl; import com.craneyuan.annotation.analisisActuator; import com.craneyuan.service.ihelloorldservice; импорт org.springframework.beans.factory.annotation.value; импорт org.spramework.serseplie.service; java.util.optional; @servicepublic class helloworldserviceimpl реализует ihelloworldservice {@analysisactuator (note = "Получить информацию о чате") public String gethellomessage (string name) {return "hello" + optunity.Ofnullable (name) .orelse ("World!"); }}Начните проект и позвоните ему случайно с помощью команды Curl. Если все пойдет хорошо, вы можете наблюдать за журналом, напечатанным на лице.
... CY666 Статистическое время: 4, Примечание: Метод получения информации о чате
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.