summaryrefslogtreecommitdiff
path: root/spring-framework/21-aop-xml-args
diff options
context:
space:
mode:
Diffstat (limited to 'spring-framework/21-aop-xml-args')
-rw-r--r--spring-framework/21-aop-xml-args/.gitignore9
-rw-r--r--spring-framework/21-aop-xml-args/pom.xml30
-rw-r--r--spring-framework/21-aop-xml-args/src/main/java/com/example/spring/App.java11
-rw-r--r--spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/Account.java38
-rw-r--r--spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/BankApp.java29
-rw-r--r--spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/aoplogger/Logger.java14
-rw-r--r--spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessChecker.java16
-rw-r--r--spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessChecker2.java16
-rw-r--r--spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessException.java30
-rw-r--r--spring-framework/21-aop-xml-args/src/main/resources/META-INF/spring/applicationContext.xml52
10 files changed, 245 insertions, 0 deletions
diff --git a/spring-framework/21-aop-xml-args/.gitignore b/spring-framework/21-aop-xml-args/.gitignore
new file mode 100644
index 0000000..ec4e05e
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/.gitignore
@@ -0,0 +1,9 @@
+# Eclipse
+bin
+.settings
+.metadata
+.classpath
+.project
+
+# Maven
+target
diff --git a/spring-framework/21-aop-xml-args/pom.xml b/spring-framework/21-aop-xml-args/pom.xml
new file mode 100644
index 0000000..f62bc57
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/pom.xml
@@ -0,0 +1,30 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>com.example.spring</groupId>
+ <artifactId>base-config</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../00-config</relativePath>
+ </parent>
+
+ <artifactId>aop-xml-args</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ <version>${springVersion}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>aspectjweaver</artifactId>
+ <version>${aspectjVersion}</version>
+ </dependency>
+
+ </dependencies>
+</project>
diff --git a/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/App.java b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/App.java
new file mode 100644
index 0000000..13a782c
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/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/21-aop-xml-args/src/main/java/com/example/spring/aop/Account.java b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/Account.java
new file mode 100644
index 0000000..f2d0e84
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/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/21-aop-xml-args/src/main/java/com/example/spring/aop/BankApp.java b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/BankApp.java
new file mode 100644
index 0000000..2473692
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/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/21-aop-xml-args/src/main/java/com/example/spring/aop/aoplogger/Logger.java b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/aoplogger/Logger.java
new file mode 100644
index 0000000..89adc56
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/aoplogger/Logger.java
@@ -0,0 +1,14 @@
+package com.example.spring.aop.aoplogger;
+
+import org.aspectj.lang.JoinPoint;
+
+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());
+ }
+}
diff --git a/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessChecker.java b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessChecker.java
new file mode 100644
index 0000000..8167f08
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/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/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessChecker2.java b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessChecker2.java
new file mode 100644
index 0000000..4174f04
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/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/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessException.java b/spring-framework/21-aop-xml-args/src/main/java/com/example/spring/aop/security/AccessException.java
new file mode 100644
index 0000000..0e1b60c
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/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/21-aop-xml-args/src/main/resources/META-INF/spring/applicationContext.xml b/spring-framework/21-aop-xml-args/src/main/resources/META-INF/spring/applicationContext.xml
new file mode 100644
index 0000000..70d0c07
--- /dev/null
+++ b/spring-framework/21-aop-xml-args/src/main/resources/META-INF/spring/applicationContext.xml
@@ -0,0 +1,52 @@
+<?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:config>
+
+
+</beans> \ No newline at end of file