Monday, 29 April 2013

Spring AOP - After Advice





After Advice (After Returning Advice)

  • Both (After Advice and After Returning Advice) are almost same and similar to before advice; only difference is that these services are applied after completion of our business logic.

  • We should implement AfterReturningAdvice interface and override afterReturning(Object returnVal, Method method, Object[] arg, Object target) method in order to create AfterReturningAdvice implementation class.

  • First parameter contains the return value of the business method or null, rest of the parameters is similar to before Advice method parameters.
Syntax Of  AfterReturningAdvice — afterReturning() Method
public void afterReturning(Object returnVal, Method method, Object[] arg,
            Object target) throws Throwable {
        }

Steps for creating implementation for AfterreturningAdvice :-

1) Create a java file in com.gaurav.aop.advices package and name it as TraceLogAfterReturnMethodExecution.



2) Place the below code in that java file.

3) Create a java bean InternetClientService in the com.gaurav.aop.services package and place the below code in the bean file.


4) Create a xml bean file names spring-internet-client-service-beans-afteradvice.xml inside src folder and place the below code in that file.

5) Create a java file TraceLogMethodAfterAdviceClient.java in the package com.gaurav.aop.advices.client inside src folder.Place the below available code in that file.
 

TraceLogAfterReturnMethodExecution.java

package com.gaurav.aop.advices;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class TraceLogAfterReturnMethodExecution implements AfterReturningAdvice {

    @Override
    public void afterReturning(Object returnVal, Method method, Object[] arg,
            Object target) throws Throwable {
        System.out
                .println("\n TraceLogAfterReturningAdvice:-Entered inside AfterReturningAdvice");

    }

}


InternetClientService.java

package com.gaurav.aop.services;

import org.springframework.transaction.IllegalTransactionStateException;

public class InternetClientService {
    private int internetUserId;
    private String internetUserName;
    private String connectionURL;

    public void setInternetUserId(int internetUserId) {
        this.internetUserId = internetUserId;
    }

    public void setInternetUserName(String internetUserName) {
        this.internetUserName = internetUserName;
    }

    public void setConnectionURL(String connectionURL) {
        this.connectionURL = connectionURL;
    }

    public void displayInternetUserId() {
        System.out.println("Internet User ID : " + this.internetUserId);
    }

    public void displayInternetUserName() {
        System.out.println("Internet User Name : " + this.internetUserName);
    }

    public void displayConnectionURL() {
        System.out.println("Connection URL in Internet is : "
                + this.connectionURL);
    }

    public void displayThrowException() {
        throw new IllegalTransactionStateException(internetUserName);
    }

}

spring-internet-client-service-beans-afteradvice.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="internetClientService" class="com.gaurav.aop.services.InternetClientService">
        <property name="internetUserId" value="315260" />
        <property name="internetUserName" value="Gaurav Kumar" />
        <property name="connectionURL" value="http://www.javatechtipssharedbygaurav.com/" />
    </bean>

    <bean id="traceLogAfterMethodBean" class="com.gaurav.aop.advices.TraceLogAfterReturnMethodExecution" />

    <bean id="internetClientServiceProxy"
                class="org.springframework.aop.framework.ProxyFactoryBean">

        <property name="target" ref="internetClientService" />

        <property name="interceptorNames">
            <list>
                <value>traceLogAfterMethodBean</value>
            </list>
        </property>
    </bean>
</beans>

TraceLogMethodAfterAdviceClient.java

package com.gaurav.aop.advices.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.gaurav.aop.services.InternetClientService;

public class TraceLogMethodAfterAdviceClient{
    public static void main(String[] args) {
        ApplicationContext appContext = new ClassPathXmlApplicationContext(
                new String[] { "spring-internet-client-service-beans-afteradvice.xml" });

        InternetClientService internetClientService = (InternetClientService) appContext
                .getBean("internetClientServiceProxy");

        System.out
                .println(" \n ##### InternetUser ID in client application is as below ");

        internetClientService.displayInternetUserId();

        System.out
                .println(" \n ##### InternetUser Name in client application is as below ");

        internetClientService.displayInternetUserName();

        System.out
                .println(" \n ##### Connection URL for Internet in client application is as below ");

        internetClientService.displayConnectionURL();

        try {
            internetClientService.displayThrowException();
        } catch (Exception e) {

        }

    }
}

Result:- 





No comments:

Post a Comment