summaryrefslogtreecommitdiff
path: root/spring-framework/23-aop-aspectj-annotations/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'spring-framework/23-aop-aspectj-annotations/src/main/java/com')
-rw-r--r--spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/App.java11
-rw-r--r--spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/Account.java38
-rw-r--r--spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/BankApp.java29
-rw-r--r--spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/security/AccessChecker.java32
-rw-r--r--spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/security/AccessException.java30
5 files changed, 140 insertions, 0 deletions
diff --git a/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/App.java b/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/App.java
new file mode 100644
index 0000000..13a782c
--- /dev/null
+++ b/spring-framework/23-aop-aspectj-annotations/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/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/Account.java b/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/Account.java
new file mode 100644
index 0000000..f2d0e84
--- /dev/null
+++ b/spring-framework/23-aop-aspectj-annotations/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/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/BankApp.java b/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/BankApp.java
new file mode 100644
index 0000000..6ad43cf
--- /dev/null
+++ b/spring-framework/23-aop-aspectj-annotations/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/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/security/AccessChecker.java b/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/security/AccessChecker.java
new file mode 100644
index 0000000..cd721f7
--- /dev/null
+++ b/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/security/AccessChecker.java
@@ -0,0 +1,32 @@
+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.");
+ }
+ }
+}
diff --git a/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/security/AccessException.java b/spring-framework/23-aop-aspectj-annotations/src/main/java/com/example/spring/aop/security/AccessException.java
new file mode 100644
index 0000000..0e1b60c
--- /dev/null
+++ b/spring-framework/23-aop-aspectj-annotations/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
+ }
+
+}