package com.example.spring.aop.security; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class AccessChecker { /* * In-place pointcut expressions are used here (i.e. the pointcut * expression is just declared with the advice directly rather than * elsewhere). */ @Before("execution(public * com.example.spring.aop.Account.deposit(..))") public void checkDepositPermission() { System.out.println("Aspect is checking deposit permission..."); } @After("execution(public * com.example.spring.aop.Account.deposit(..))") public void checkDepositPermissionAfterDemo() { System.out.println("checkDepositPermissionAfterDemo()"); } @Before("execution(public * com.example.spring.aop.Account.withdraw(..)) && args(amount)") public void checkWithdrawPermission(double amount) { System.out.println("Aspect is checking withdraw permission for " + amount); if (amount > 1000.0) { throw new AccessException("Withdrawing more than 1000.0 is not allowed."); } } }