Spring AOP — Around Advice | Code Factory

Code Factory
2 min readJan 30, 2021

--

Donate : Link

WordPress Blog : Link

Applications… : Link

Spring Tutorial Index Page: Link

  • MethodInterceptor example using Programmatic approach.
  • MethodInterceptor: Around Advice it is executed before and after the actual method call.

Create Java Project

  • Open Eclipse
  • Go to File -> New -> Other… -> Java Project
  • Create AOP-Programmatic3 project
  • Right click on project -> Build Path -> Configure Build Path -> Libraries tab -> Add External JARs
    - aopalliance.jar
    - aspectjrt.jar
    - aspectjweaver.jar
    - cglib-nodep-X.X.jar
    - commons-logging-X.X.jar
    - spring-aop-X.X.X.jar
    - spring-beans-X.X.X.jar
    - spring-context-X.X.X.jar
    - spring-core-X.X.X.jar
    - aspectjlib-X.X.X.jar
    - spring-aspects-X.X.X.jar
  • * You can find dtd information from spring-beans-X.X.X.jar -> org -> springframework -> beans -> factory -> xml -> spring-beans.dtd (line no 36 & 37)

Bank.java

package com.codeFactory.business;/**
* @author code.factory
*
*/
public class Bank {
private int amount = 1000;
private String accNo = "SBI12345";
public int deposit(int amount, String accNo) {
if (accNo.equals(this.accNo)) {
this.amount += amount;
} else {
throw new AccnoNotFoundException();
}
return this.amount;
}
@Override
public String toString() {
return "Bank [amount=" + amount + ", accNo=" + accNo + "]";
}
}

LogAroundService.java

package com.codeFactory.service;import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.codeFactory.business.Bank;/**
* @author code.factory
*
*/
public class LogAroundService implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
Log l = LogFactory.getLog(Bank.class);
l.info("before deposite code");
Object obj = mi.proceed();
l.info("after deposite code");
return obj;
}
}

AccnoNotFoundException.java

package com.codeFactory.business;/**
* @author code.factory
*
*/
public class AccnoNotFoundException extends RuntimeException {
@Override
public String toString() {
return "AccNo invalid";
}
}

Client.java

package com.codeFactory.test;import org.springframework.aop.framework.ProxyFactoryBean;import com.codeFactory.business.Bank;
import com.codeFactory.service.LogAroundService;
/**
* @author code.factory
*
*/
public class Client {
public static void main(String... args) {
/* create target */
Bank b = new Bank();
/* create advice */
LogAroundService las = new LogAroundService();
/* add target + advice to proxy */
ProxyFactoryBean bean = new ProxyFactoryBean();
bean.setTarget(b);
bean.addAdvice(las);

/* get generated proxy object */
Bank bankProxy = (Bank) bean.getObject();
int amt = bankProxy.deposit(150, "SBI12345");
System.out.println(amt);

}
}

Output:

Dec 23, 2020 12:20:04 PM com.codeFactory.service.LogAroundService invoke
INFO: before deposite code
Dec 23, 2020 12:20:04 PM com.codeFactory.service.LogAroundService invoke
INFO: after deposite code
1150

--

--