Spring AOP — Around Advice | Code Factory

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)
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 + "]";
}
}
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;
}
}
package com.codeFactory.business;/**
* @author code.factory
*
*/
public class AccnoNotFoundException extends RuntimeException {
@Override
public String toString() {
return "AccNo invalid";
}
}
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);

}
}
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

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Build a CRUD App with Flask, Bootstrap & Heroku

Creating Serverless Application using AWS SAM ( Serverless Application Model ) and DynamoDB

The Power Of Linux-Lesson 1

How to think smarter about software development

nginx with Let’s Encrypt in Docker container 💕

Changing Summation Limits: A Computational Solution To A Programming Interview Question

All Things Apache Flink and Why Its Popularity is Rising

PHP Vs Python: An in-depth Comparison between both Languages

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Code Factory

Code Factory

More from Medium

SOLID Design Principle Java

Factory Method Design Pattern

Responsibility Driven Object Oriented Design

What is the Epoch Time?