From 4afcff940551079617e8f4116e52bb0ef9df7fcc Mon Sep 17 00:00:00 2001 From: Kamal Wickramanayake Date: Sat, 25 Apr 2026 21:53:33 +0530 Subject: Added Spring Framework sample code --- .../src/main/java/com/example/spring/App.java | 11 +++++ .../main/java/com/example/spring/aop/Account.java | 38 ++++++++++++++++ .../main/java/com/example/spring/aop/BankApp.java | 29 +++++++++++++ .../example/spring/aop/security/AccessChecker.java | 50 ++++++++++++++++++++++ .../spring/aop/security/AccessException.java | 30 +++++++++++++ .../example/spring/aop/security/MyPointcuts.java | 20 +++++++++ 6 files changed, 178 insertions(+) create mode 100644 spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/App.java create mode 100644 spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/Account.java create mode 100644 spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/BankApp.java create mode 100644 spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessChecker.java create mode 100644 spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessException.java create mode 100644 spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/MyPointcuts.java (limited to 'spring-framework/24-aop-aspectj-annotations2/src/main/java') diff --git a/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/App.java b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/App.java new file mode 100644 index 0000000..13a782c --- /dev/null +++ b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/App.java @@ -0,0 +1,11 @@ +package com.example.spring; + +import com.example.spring.aop.BankApp; + +public class App { + public static void main(String[] args) { + // Actually, BankApp is the class with the main method. + // It should have been executed directly instead of this class. + BankApp.main(args); + } +} diff --git a/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/Account.java b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/Account.java new file mode 100644 index 0000000..f2d0e84 --- /dev/null +++ b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/Account.java @@ -0,0 +1,38 @@ +package com.example.spring.aop; + +public class Account { + private int accNo; + private double balance; + + public void withdraw(double amount) { + if (balance >= amount) { + balance -= amount; + } + } + + public void deposit(double amount) { +// System.out.println("Account.deposit()"); + balance += amount; + } + + + public void printDetails() { + System.out.println("Balance of " + accNo + " : " + balance); + } + + public int getAccNo() { + return accNo; + } + + public void setAccNo(int accNo) { + this.accNo = accNo; + } + + public double getBalance() { + return balance; + } + + public void setBalance(double balance) { + this.balance = balance; + } +} diff --git a/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/BankApp.java b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/BankApp.java new file mode 100644 index 0000000..6ad43cf --- /dev/null +++ b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/BankApp.java @@ -0,0 +1,29 @@ +package com.example.spring.aop; + +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class BankApp { + + /** + * @param args + */ + public static void main(String[] args) { + ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { + "classpath:META-INF/spring/applicationContext.xml",}); + + Account acc = ctx.getBean("account", Account.class); + + acc.printDetails(); // 250 + acc.withdraw(10); + acc.printDetails(); // 240 + acc.deposit(20); + acc.printDetails(); // 260 + +// System.out.println("An exception should occur here if attempted to withdraw a large amount."); +// acc.withdraw(1200); // Uncommented, this should throw an exception +// acc.printDetails(); // 260 + + ctx.close(); + } + +} diff --git a/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessChecker.java b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessChecker.java new file mode 100644 index 0000000..dff17bc --- /dev/null +++ b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessChecker.java @@ -0,0 +1,50 @@ +package com.example.spring.aop.security; + +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."); +// } +// } + + + @Before("MyPointcuts.abc()") + public void checkDepositPermission() { + System.out.println("Aspect is checking deposit permission..."); + } + + @Before("MyPointcuts.checkWithAmount(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."); + } + } + + @Before("MyPointcuts.depositAndWithdraw()") + public void depositAndWithdraw() { + System.out.println("depositAndWithdraw()"); + } +} diff --git a/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessException.java b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessException.java new file mode 100644 index 0000000..0e1b60c --- /dev/null +++ b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessException.java @@ -0,0 +1,30 @@ +package com.example.spring.aop.security; + +public class AccessException extends RuntimeException { + + + /** + * + */ + private static final long serialVersionUID = -6529989268011261235L; + + public AccessException() { + // TODO Auto-generated constructor stub + } + + public AccessException(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public AccessException(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } + + public AccessException(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + +} diff --git a/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/MyPointcuts.java b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/MyPointcuts.java new file mode 100644 index 0000000..51f7104 --- /dev/null +++ b/spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/MyPointcuts.java @@ -0,0 +1,20 @@ +package com.example.spring.aop.security; + +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; + +@Aspect +public class MyPointcuts { + + /* + * Following are the pointcut declarations. Note that these can be defined in separate classes as well. + */ + @Pointcut("execution(public * com.example.spring.aop.Account.withdraw(..)) && args(amount)") // pointcut expression - a selector + public void checkWithAmount(double amount) {} // pointcut signature - the name for the pointcut + + @Pointcut("execution(public * com.example.spring.aop.Account.deposit(..))") // pointcut expression - a selector + public void abc() {} // pointcut signature - the name for the pointcut + + @Pointcut("execution(public * com.example.spring.aop.Account.withdraw(..)) || execution(public * com.example.spring.aop.Account.deposit(..))") + public void depositAndWithdraw() {} +} -- cgit v1.2.3