Spring AOP — Throwing Advice | Code Factory

Spring Tutorial Index Page: Link

  • ThrowsAdvice example using Programmatic approach.
  • ThrowsAdvice: Throws Advice it is executed if actual method throws exception.

Create Java Project

  • Open Eclipse
  • Go to File -> New -> Other… -> Java Project
  • Create AOP-Programmatic4 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.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.aop.ThrowsAdvice;
import com.codeFactory.business.Bank;/**
* @author code.factory
*
*/
public class LogExceptionService implements ThrowsAdvice {
/* ThrowsAdvice will not force to implement any method
* It is a Marker Interace */

public void afterThrowing(Exception e) {
Log l = LogFactory.getLog(Bank.class);
l.info("incase of exception in deposit: " + e);
}
}
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.LogExceptionService;
/**
* @author code.factory
*
*/
public class Client {
public static void main(String... args) {
/* create target */
Bank b = new Bank();
/* create advice */
LogExceptionService les = new LogExceptionService();
/* add target + advice to proxy */
ProxyFactoryBean bean = new ProxyFactoryBean();
bean.setTarget(b);
bean.addAdvice(les);

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

amt = bankProxy.deposit(150, "SBI1234");
System.out.println(amt);

}
}
1150
Dec 23, 2020 1:19:28 PM com.codeFactory.service.LogExceptionService afterThrowing
INFO: incase of exception in deposit: AccNo invalid
Exception in thread "main" AccNo invalid
at com.codeFactory.business.Bank.deposit(Bank.java:16)
at com.codeFactory.business.Bank$$FastClassByCGLIB$$1a9c7cc.invoke(<generated>)
...
...
at com.codeFactory.business.Bank$$EnhancerByCGLIB$$99d62c76.deposit(<generated>)
at com.codeFactory.test.Client.main(Client.java:28)

--

--

--

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

Recommended from Medium

Please don’t do it Github

Agile It!

Progress…is progressing?

2.5D P1 Framework: Complete!

Pushdown Automata (PDA) and Context Free Grammar (CFG)

Apache Derby using JAVA

“Project Portfolio: CLI Data Gem”.

TryHackMe — Blue Walkthrough (Write up )

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

Functional Interfaces in Java

Trackpad gestures on MacOS in Java

Key Differences Between Spring Boot and Spring Framework

Why migrate to Java 17?