Wednesday, December 14, 2011

AOP and Spring

Logging aspects and Spring.
Add this to your applicationContext.xml file.
 





service,logic,integration



loggingAdvice











  • This will cause the three beans, service, logic and integration to be logged.
  • This will cause the "bean" loggingAdvice to be exposed in the JMX console with the name TestLogging
  • This will expose the property enabled to the JMX console, set that to true and the aop starts to log.
Below is the complete Logging advice class.
package com.aja;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.aop.ThrowsAdvice;

import com.ericsson.sdp.media.eup.charging.error.ErrorHandler;

import java.lang.reflect.Method;


/**
* Logging interceptor.
*/
public class LoggingAdvice implements MethodBeforeAdvice, AfterReturningAdvice,
ThrowsAdvice {
private boolean enabled = true;



/**
* Transcodeeates a new instance of LoggingAdvice.
*/
public LoggingAdvice() {
}

/* (non-Javadoc)
* @see org.springframework.aop.MethodBeforeAdvice#before(java.lang.reflect.Method, java.lang.Object[], java.lang.Object)
*/
public void before(Method method, Object[] args, Object target)
throws Throwable {
if (!enabled) {
return;
}

StringBuffer builder = new StringBuffer();
builder.append("enter ").append(method.getName()).append("(");

for (int i = 0; args == null?false:(i < args.length); i++) {
builder.append(args[i]);

if (i < (args.length - 1)) {
builder.append(", ");
}
}

builder.append(")");

ErrorHandler.handleDebug(builder.toString());

}

/* (non-Javadoc)
* @see org.springframework.aop.AfterReturningAdvice#afterReturning(java.lang.Object, java.lang.reflect.Method, java.lang.Object[], java.lang.Object)
*/
public void afterReturning(Object returnValue, Method method,
Object[] args, Object target) throws Throwable {
if (!enabled) {
return;
}

ErrorHandler.handleDebug(RETURN + method.getName());
}

/**
* @param method
* @param args
* @param target
* @param exc
*/
public void afterThrowing(Method method, Object[] args, Object target,
Throwable exc) {
if (!enabled) {
return;
}

ErrorHandler.handleDebug("return " + method.getName() + exc.getMessage());

}

/**
* @return the enabled
*/
public boolean isEnabled() {
return enabled;
}

/**
* @param enabled the enabled to set
*/
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}

0 comments:

Post a Comment