Spring AOP:周围方面不起作用

时间:2018-05-04 08:19:24

标签: java spring java-8 aop spring-aop

我有一个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课上使用AOP吗?那么替代方案是什么?

1 个答案:

答案 0 :(得分:0)

Spring AOP不适用于不是spring bean的类。您需要使用AspectJ。阅读更多:spring-docs