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

CONGRATULATIONS TO OUR NEW GRADUATES!

Snowflake: Table Swap, use case & Demo?

How to Test Code with Side Effects in a Pure Way Scala

A Sort of Permutation

READ/DOWNLOAD#< Introduction to Computer Graphics

How to Deploy an Angular Application in Azure:Azure Front Door

How Logging slowed down my Application

Ops - a Cost Savings Center

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

What is OAuth 2.0 Authorization Framework

Chain of Responsibility Pattern(Behavioral Design Pattern)

Three Deployment Patterns

Do you Waterproof your Software?