2014-10-28 1 views
0

Я использую aspectj и spring boot. Я пытаюсь зарегистрировать сообщение, когда вызывается метод (логическое значение). аспекты работы в целом, но мое выражение для ловли должно быть неправильноAspectJ Spring Метод улавливания лотков с логическим параметром

он работает с (но причины ловя каждый метод):

@Before("execution(* de.fhb..*(..))") 

также работает (ловить только с одним параметром)

@Before("execution(* de.fhb..*(*))") 

теперь проблема:

@Before("execution(* de.fhb..*(boolean))") 

о r

@Before("execution(* de.fhb..*(java.lang.Boolean))") 

не работает. Любая помощь? Ошибка должна быть между исполнением (* de.fhb .. * ((моя ошибка я думаю))

здесь мои файлы (геттер & & сеттер генерируются с Ломбок):

POJO:

package de.fhb.showcase; 

@Getter @Setter 
public class Show { 

    private String name; 
    private boolean live; 

    public void makeShowLive(boolean value) { 
     live = value; 
    } 
} 

аспект:

package de.fhb.aop; 

import javax.inject.Named; 

import lombok.extern.java.Log; 

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 

@Aspect 
@Named 
@Log 
public class CleanCodeAspect { 

    @Before("execution(* de.fhb..*(..))") 
    public void checkStyleBooleanParameter() { 

     log.warning("You used a method with only one boolean parameter. " 
       + "Refactor it into 2 methods with True, False at the end."); 
    } 

} 
+0

Попробуйте 'java.lang.boolean'. Я также сомневаюсь, что создание методов, подобных 'setLiveTrue()' или 'setLiveFalse()', является чистым кодом. Он должен быть более функциональным, например 'enable()'/'disable()' или 'show()'/'hide()'. Но это может быть только я. –

+0

java.lang.boolean дает мне эту ошибку: предупреждение не соответствует имени этого типа: java.lang.boolean [Xlint: invalidAbsoluteTypeName] at org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression и с чистым кодом, который я получил эта идея из http://www.planetgeek.ch/wp-content/uploads/2013/06/Clean-Code-V2.1.pdf (аргументы Selector/Flag) - это всего лишь простой пример (не стандартное ведение журнала, отслеживание времени). но thx для вашего совета – svenhornberg

ответ

0

Ваш синтаксис является правильным, увидеть и тест для себя без Lom Бок. Я думаю, что проблема заключается в том, что Ломбок вмешивается в AspectJ, возможно, аналогично описанному here (перейдите по ссылкам, чтобы узнать подробности). Это может быть другая проблема, но это была бы моя первая ставка.

+0

Я удалил ломбок из моего pojo, но он не работает с булевым. * работа хорошо. Должен ли я опубликовать ссылку на мой репозиторий github? – svenhornberg

+0

Да, пожалуйста. Я пробовал с родным AspectJ, а не с весной. Обычно я не являюсь пользователем Spring. – kriegaex

+0

получил работу со стандартным образцом здесь https://github.com/svenhornberg/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-aop. Я буду искать разницу Named и Component was not the reason – svenhornberg

Смежные вопросы