У меня есть фрагмент кода:
@Aspect
public class PointcutDefinition {
@Pointcut("within(com.byteslounge.web..*)")
public void webLayer() {
}
@Pointcut("within(com.byteslounge.service..*)")
public void serviceLayer() {
}
@Pointcut("within(com.byteslounge.dao..*)")
public void dataAccessLayer() {
}
}
и LoggingAspect.java:
@Aspect
public class AccountLoggingAspect {
@Before(value = "com.byteslounge.spring.aop.PointcutDefinition.serviceLayer() && "
+ "args(account,..)")
public void beforeAccountMethodExecution(JoinPoint jp, Account account) {
System.out.println("Before method: " + jp.getSignature().getName() + ". Class: " + jp.getTarget().getClass().getSimpleName());
System.out.println("Logging account access. Account: " + account.getAccountNumber());
}
}
и класс обслуживания, как показано ниже:
@Service
public class ExampleService {
@Auditable(AuditDestination.DATABASE)
public void updateAccountBalance(Account account) {
System.out.println("Inside updateAccountBalance(). Account: " + account.getAccountNumber() );
}
}
beforeAccountMethodExecution()
исполняется до updateAccountBalance(Account account)
.Но я хочу, чтобы этот вызов перехвата выполнялся только тогда, когда я вызываю updateAccountBalance(Account account)
из определенного пакета, а не из другого места.Проще говоря, я хочу, чтобы AOP функционировал только тогда, когда updateAccountBalance
вызывается из пакета "xyz".Есть ли выход?