coderoid (coderoid) wrote,
coderoid
coderoid

Category:

Java урок дня 20-02-2013

Мигрирование пакета с AspectJ SpringAOP на Load-Time Weaving занимает несколько шагов. Один из них такой:

Было:

<bean id="myAdvice" class="my.advice.MyAdvice">
   <constructor-arg value="2" />
</bean>

Стало (баг):

<bean id="myAdvice" class="my.advice.MyAdvice" factory-method="aspectOf">
   <constructor-arg value="2" />
</bean>

При этом выдается ошибка: No matching factory method found: factory method 'aspectOf()'.

Проблема - использование factory-method автоматом означает, что constructor-arg, который раньше был аргументом конструктора, теперь будет передаваться как параметр метода aspectOf и сделает его параметризованым. А фабрика ищет aspectOf() без параметров и обламывается.

Как всегда, банальный копипаст - а кучу часов потерял на вылавливание ошибки.

Правильно (так как параметризованный конструктор использовать нельзя, инициализируем свойство напрямую):

<bean id="myAdvice" class="my.advice.MyAdvice" factory-method="aspectOf">
   <property name="someAdviceProperty" value="2">
</bean>

Программисты, если вы пишете код, который что-то ищет и не находит, то пишите, пожалуйста, что вы нашли. В этом случае можно было бы добавить "but found aspectOf(int)", или "please check that you do not pass any parameters to aspectOf".

Если проверка числа на диапазон, не пишите "invalid number", а что-то вроде "expected number between 10 and 20 and got: <actual number>". То же самое с enum - "invalid enum value <actual value>, expected it to be one of [ONE, TWO, THREE]."

Tags: aop, aspectj, fml, java, load-time weaving, ltw, pain, spring, work
Subscribe

  • Пару новых англиских слов

    Sordid - отвратительный, мерзкий, противный и т.п. (Похоже на morbid, правда?) Cock block - как глагол, когда один парень мешает (сознательно или…

  • Aaron Swartz

    Как тесен мир - а парень-то работал в конторе ThoughtWorks, где Martin Fowler ("Рефакторинг") является одним из ключевых людей... А прокурорша…

  • И еще немного лытдыбра (android root, game cheats)

    Зарутил наконец-то свой телефон (Samsung Galaxy S2). Радости полные штаны, причем не только от вайфая, который с горем пополам можно было пользовать…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments