Spring AOP — Throwing Advice | Code Factory

Spring Tutorial Index Page: Link

Create Java Project

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)

--

--

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