summaryrefslogtreecommitdiff
path: root/spring-framework/24-aop-aspectj-annotations2/src/main
diff options
context:
space:
mode:
authorKamal Wickramanayake <kamal@inbox.lk>2026-04-25 21:53:33 +0530
committerKamal Wickramanayake <kamal@inbox.lk>2026-04-25 21:53:33 +0530
commit4afcff940551079617e8f4116e52bb0ef9df7fcc (patch)
treecbaed6a2a53c7d032bfafaa38b94e4fc607f3e76 /spring-framework/24-aop-aspectj-annotations2/src/main
parent7b08f1155e1cb8bf263c3570eeb119970407a037 (diff)
Added Spring Framework sample code
Diffstat (limited to 'spring-framework/24-aop-aspectj-annotations2/src/main')
-rw-r--r--spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/App.java11
-rw-r--r--spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/Account.java38
-rw-r--r--spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/BankApp.java29
-rw-r--r--spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessChecker.java50
-rw-r--r--spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/AccessException.java30
-rw-r--r--spring-framework/24-aop-aspectj-annotations2/src/main/java/com/example/spring/aop/security/MyPointcuts.java20
-rw-r--r--spring-framework/24-aop-aspectj-annotations2/src/main/resources/META-INF/spring/applicationContext.xml24
7 files changed, 202 insertions, 0 deletions
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() {}
+}
diff --git a/spring-framework/24-aop-aspectj-annotations2/src/main/resources/META-INF/spring/applicationContext.xml b/spring-framework/24-aop-aspectj-annotations2/src/main/resources/META-INF/spring/applicationContext.xml
new file mode 100644
index 0000000..1da13a1
--- /dev/null
+++ b/spring-framework/24-aop-aspectj-annotations2/src/main/resources/META-INF/spring/applicationContext.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
+
+ <!-- Enabled annotation based AOP -->
+ <aop:aspectj-autoproxy/>
+
+ <!-- This been describes pointcuts -->
+ <bean id="myPointcuts" class="com.example.spring.aop.security.MyPointcuts" />
+
+ <!-- This bean simply references pointcuts -->
+ <bean id="accessChecker" class="com.example.spring.aop.security.AccessChecker" />
+
+
+ <bean id="account" class="com.example.spring.aop.Account">
+ <property name="accNo" value="1000"></property>
+ <property name="balance" value="250.00"></property>
+ </bean>
+
+</beans> \ No newline at end of file