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

  • UML редакторы

    Нашел на днях наконец-то пару UML редакторов, с которыми можно нормально работать! Оба отличаются тем, что используют простой структурированный…

  • Вот оно, будущее

    Сиетл, 2012. Алекс пошел в магазин и купил 800 грамм обеда. Пища в то время стоила $17.61 за килограмм.

  • Google купил Meebo

    Ну все, приехали - гипс снимают, клиент уезжает, все сервисы выключают. Про то, куда это все переедет - ни слова. =\ Эх, а такой полезный сервис…

  • 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