Spring AOP — Before Advice | Code Factory

Spring Tutorial Index Page: Link

  • MethodBeforeAdvice example using Programmatic approach
  • MethodBeforeAdvice: Before Advice it is executed before the actual method call.

Create Java Project

  • Open Eclipse
  • Go to File -> New -> Other… -> Java Project
  • Create AOP-Programmatic1 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;
}
}
package com.codeFactory.service;import java.lang.reflect.Method;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.aop.MethodBeforeAdvice;
import com.codeFactory.business.Bank;/**
* @author code.factory
*
*/
public class LogBeforeService implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] objects, Object object) throws Throwable {
Log l = LogFactory.getLog(Bank.class);
l.info("Deposit method");
}
}
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.LogBeforeService;
/**
* @author code.factory
*
*/
public class Client {
public static void main(String... args) {
/* create target */
Bank b = new Bank();
/* create advice */
LogBeforeService lbs = new LogBeforeService();
/* add target + advice to proxy */
ProxyFactoryBean bean = new ProxyFactoryBean();
bean.setTarget(b);
bean.addAdvice(lbs);

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

--

--

--

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

Recommended from Medium

Launching a Mobile App Without Analytics is Crazy Talk!

A quick guide to Kubernetes

TestProject: The Tool of Future — Beginner guide to getting started

CS373 Spring 2020: Ryan Resma — Week 9

ANSIBLE DYNAMIC INVENTORY WITH AWS

How to Install Windows 10 on Android Without Root/Computer

BOX-MODEL

Building Your WSO2 Integrations with Unit Tests; A Guide for WSO2 Micro Integrator & Enterprise…

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

Factory Method Design Pattern

Factory Method Design Pattern

Wrapper classes in Java!!

Spring MVC