в аннотации вы можете использовать только примитивы, String, Class, перечисления, аннотации и массивы предыдущих типов. Вы можете получить то же поведение, используя рекомендации АОП. Если вы хотите получить доступ к аргументам объектов метода или получить цель advise, вы можете написать советник, подобный этому:
@Aspect
public class AOPSampleAdvice {
.....
@AfterReturning("execution(* *..YorServiceInterface.placeOrder(..))")
public void afterReturning(JoinPoint joinPoint) {
/*Use this if the order is passed in the method signature*/
//Object[] args = joinPoint.getArgs();
//Order order = (Order) args[0];
/**/
Object target = joinPoint.getTarget();
List<Item> items = ((YorServiceInterface) target).getItems();
User user = ((YorServiceInterface) target).getUser();
//Your business
}
Каждый раз, когда метод placeOrder вызывается при возврате этого метода, запускайте этот совет. Вы можете использовать:
@Before
@AfterReturning
@AfterThrowing
@After (finally)
@Around
Чтобы зарегистрировать этот совет в вашей заявке Kontext.xml, напишите:
<!-- enable aop -->
<aop:aspectj-autoproxy/>
<bean id="adviseAspect" class="com.foo.acme.AOPSampleAdvice"/>