Spring AOP: вокруг аспект не работает - PullRequest
0 голосов
/ 04 мая 2018

У меня есть один класс POJO, для которого я должен угнать один из его методов своей собственной логикой.

POJO:

CustomerModel

package com.test.model;

public class CustomerModel
{
    public static final String EMAIL = "email";
    public static final String uid = "uid";
    public static final String DEFAULTB2BUNIT = "defaultB2BUnit";

    @Accessor(qualifier = "defaultB2BUnit", type = Accessor.Type.GETTER)
    public B2BUnitModel getDefaultB2BUnit()
    {
        return getPersistenceContext().getPropertyValue(DEFAULTB2BUNIT);
    }

    ...
}

Этот класс POJO генерируется автоматически, и я не могу его изменить. Я хочу использовать функцию Spring AOP, чтобы перехватить метод getDefaultB2BUnit (), чтобы я мог выполнить свою логику для отправки правильного B2BUnit.

Пока я сделал это ..

Аспект -

@Aspect
public class AccountSelectionAspect
{

@Resource
private AccountSelectionService accountSelectionService;

@Around("execution(* com.test.model.CustomerModel.getDefaultB2BUnit())")
public Object decideAround(final ProceedingJoinPoint joinPoint) throws Throwable
{
    final B2BUnitModel account = accountSelectionService.getSelectedAccount();

    if (account == null)
    {
        return joinPoint.proceed();
    }

    return account;
}
}

spring.xml -

<aop:aspectj-autoproxy />
<bean class="com.test.core.account.aspect.AccountSelectionAspect"/>

Теперь этот аспект вообще не вызывает. Всякий раз, когда делается вызов для извлечения defaultB2BUnit, AOP не захватывает метод.

final CustomerModel customer = currentUser;
B2BUnitModel defaultB2BUnit = customer.getDefaultB2BUnit();

Просьба предложить.

Обновление -

Могу ли я не использовать АОП в классе POJO? Какая альтернатива тогда?

1 Ответ

0 голосов
/ 04 мая 2018

Spring AOP не будет работать с классами, которые не являются бобами Spring. Вам нужно использовать AspectJ для этого. Подробнее: spring-docs .

...