summaryrefslogtreecommitdiff
path: root/spring-framework/22-aop-xml-around/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/22-aop-xml-around/src/main
parent7b08f1155e1cb8bf263c3570eeb119970407a037 (diff)
Added Spring Framework sample code
Diffstat (limited to 'spring-framework/22-aop-xml-around/src/main')
-rw-r--r--spring-framework/22-aop-xml-around/src/main/java/com/example/spring/App.java11
-rw-r--r--spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/Account.java38
-rw-r--r--spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/BankApp.java29
-rw-r--r--spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/aoplogger/Logger.java26
-rw-r--r--spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker.java16
-rw-r--r--spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker2.java16
-rw-r--r--spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessException.java30
-rw-r--r--spring-framework/22-aop-xml-around/src/main/resources/META-INF/spring/applicationContext.xml60
8 files changed, 226 insertions, 0 deletions
diff --git a/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/App.java b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/App.java
new file mode 100644
index 0000000..13a782c
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/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/22-aop-xml-around/src/main/java/com/example/spring/aop/Account.java b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/Account.java
new file mode 100644
index 0000000..f2d0e84
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/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/22-aop-xml-around/src/main/java/com/example/spring/aop/BankApp.java b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/BankApp.java
new file mode 100644
index 0000000..2473692
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/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/22-aop-xml-around/src/main/java/com/example/spring/aop/aoplogger/Logger.java b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/aoplogger/Logger.java
new file mode 100644
index 0000000..4ca8621
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/aoplogger/Logger.java
@@ -0,0 +1,26 @@
+package com.example.spring.aop.aoplogger;
+
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+
+public class Logger {
+
+ public void beforMethodExecuted(JoinPoint joinPoint) {
+ System.out.println("AOP Logger (BEFORE): " + joinPoint.getSignature());
+ }
+
+ public void afterMethodExecuted(JoinPoint joinPoint) {
+ System.out.println("AOP Logger (AFTER): " + joinPoint.getSignature());
+ }
+
+ public Object methodExecutionMonitor(ProceedingJoinPoint pjp) throws Throwable {
+
+ long startTime = System.nanoTime();
+ Object retVal = pjp.proceed();
+ long endTime = System.nanoTime();
+
+ System.out.println("Method execution time (ns): " + pjp.getSignature() + " " + (endTime - startTime));
+
+ return retVal;
+ }
+}
diff --git a/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker.java b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker.java
new file mode 100644
index 0000000..8167f08
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker.java
@@ -0,0 +1,16 @@
+package com.example.spring.aop.security;
+
+public class AccessChecker {
+
+ public void checkDepositPermission() {
+ System.out.println("Aspect is checking deposit permission...");
+ }
+
+
+ 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.");
+ }
+ }
+}
diff --git a/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker2.java b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker2.java
new file mode 100644
index 0000000..4174f04
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessChecker2.java
@@ -0,0 +1,16 @@
+package com.example.spring.aop.security;
+
+import org.aspectj.lang.JoinPoint;
+
+public class AccessChecker2 {
+
+ public void checkDepositPermission(JoinPoint joinPoint) {
+ Object[] args = joinPoint.getArgs();
+ System.out.println("Deposit amount: " + args[0]);
+ }
+
+ public void checkWithdrawPermission(JoinPoint joinPoint) {
+ Object[] args = joinPoint.getArgs();
+ System.out.println("Withdraw amount: " + args[0]);
+ }
+}
diff --git a/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessException.java b/spring-framework/22-aop-xml-around/src/main/java/com/example/spring/aop/security/AccessException.java
new file mode 100644
index 0000000..0e1b60c
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/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/22-aop-xml-around/src/main/resources/META-INF/spring/applicationContext.xml b/spring-framework/22-aop-xml-around/src/main/resources/META-INF/spring/applicationContext.xml
new file mode 100644
index 0000000..b6126cf
--- /dev/null
+++ b/spring-framework/22-aop-xml-around/src/main/resources/META-INF/spring/applicationContext.xml
@@ -0,0 +1,60 @@
+<?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">
+
+ <bean id="account" class="com.example.spring.aop.Account">
+ <property name="accNo" value="1000"></property>
+ <property name="balance" value="250.00"></property>
+ </bean>
+
+ <!-- Here is a bean representing the security aspect -->
+ <bean id="accessChecker"
+ class="com.example.spring.aop.security.AccessChecker2" />
+
+ <!-- This aspect can print the method signatures when methods are executed
+ - before, and after -->
+ <bean id="aopLogger"
+ class="com.example.spring.aop.aoplogger.Logger" />
+
+ <aop:config>
+ <!-- <aop:aspect id="securityAspect" ref="accessChecker"> -->
+
+ <!-- <aop:pointcut id="deposit" -->
+ <!-- expression="execution(public * com.example.spring.aop.Account.deposit(..))"
+ /> -->
+ <!-- <aop:before pointcut-ref="deposit" -->
+ <!-- method="checkDepositPermission" /> -->
+
+ <!-- <aop:pointcut id="withdraw" -->
+ <!-- expression="execution(public * com.example.spring.aop.Account.withdraw(..))"
+ /> -->
+ <!-- <aop:before pointcut-ref="withdraw" -->
+ <!-- method="checkWithdrawPermission" /> -->
+
+ <!-- </aop:aspect> -->
+
+ <!-- <aop:aspect id="loggerAspect" ref="aopLogger"> -->
+
+ <!-- <aop:pointcut id="bankPackageMethod" -->
+ <!-- expression="execution(public * com.example.spring.aop.**.*(..))" /> -->
+ <!-- <aop:before pointcut-ref="bankPackageMethod" -->
+ <!-- method="beforMethodExecuted" /> -->
+ <!-- <aop:after pointcut-ref="bankPackageMethod" -->
+ <!-- method="afterMethodExecuted" /> -->
+
+ <!-- </aop:aspect> -->
+
+ <aop:aspect id="loggerAspect" ref="aopLogger">
+ <aop:pointcut id="allMethods"
+ expression="execution(public * com.example.spring.aop.**.*(..))" />
+ <aop:around pointcut-ref="allMethods"
+ method="methodExecutionMonitor" />
+ </aop:aspect>
+ </aop:config>
+
+
+</beans> \ No newline at end of file