Saturday, April 28, 2012

Spring AOP XML configuration

We'll learn how to configure aspects, advice and pointcuts using the traditional XML way.



package com.venkat.Spring.Aop;


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


import com.venkat.Spring.Aop.service.ShapeService;


public class AopTest {


public static void main(String args[])
{
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
ShapeService service=context.getBean("shapeService",ShapeService.class);
service.getCircle();
}
}
****************************************************************************
package com.venkat.Spring.Aop.Aspect;

public @interface Loggable {

}
********************************************************************************
package com.venkat.Spring.Aop.Aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Aspect;


@Aspect
public class LoggingAspect {

// @Pointcut("execution(*  get*())")
// public void allGetters(){}
// @Around("@annotation(com.venkat.Spring.Aop.Aspect.Loggable)")
public Object myAroundAdvice(ProceedingJoinPoint proceedingJoinPoint) 
{
Object returnValue=null;
try {
System.out.println("Before method Executed");
returnValue=proceedingJoinPoint.proceed();
System.out.println("After Method Executed....");
} catch (Throwable e) {
System.out.println("Around Advice throws exception");
}
System.out.println("After Finally executed........");
return returnValue;
}
}
*************************************************************************
package com.venkat.Spring.Aop.model;

public class Circle {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
System.out.println("Setter method is called.....");
throw(new RuntimeException());
}
public String setNameAndReturning(String name) {
this.name = name;
System.out.println("Setter Method and return the value method executed....");
return name;
}
}
***********************************************************************
package com.venkat.Spring.Aop.model;

public class Triangle {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
****************************************************************************
package com.venkat.Spring.Aop.service;

import com.venkat.Spring.Aop.Aspect.Loggable;
import com.venkat.Spring.Aop.model.Circle;
import com.venkat.Spring.Aop.model.Triangle;

public class ShapeService {

private Triangle triangle;
private Circle circle;
public Triangle getTriangle() {
return triangle;
}
public void setTriangle(Triangle triangle) {
this.triangle = triangle;
}
@Loggable
public Circle getCircle() {
return circle;
}
public void setCircle(Circle circle) {
this.circle = circle;
}
}
*********************************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<aop:aspectj-autoproxy/>
<bean name="triangle" class="com.venkat.Spring.Aop.model.Triangle">
<property name="name" value="triangle name"/>
</bean>
<bean name="circle" class="com.venkat.Spring.Aop.model.Circle">
<!-- <property name="name" value="circle name"/>  -->
</bean>
<bean name="shapeService" class="com.venkat.Spring.Aop.service.ShapeService">
<property name="triangle" ref="triangle"/>
<property name="circle" ref="circle"/>
</bean>
<bean  name="loggingAdviceBean" class="com.venkat.Spring.Aop.Aspect.LoggingAspect"/>
<aop:config>
<aop:aspect id="loggingAdvice" ref="loggingAdviceBean">
<aop:pointcut  id="allGetters" expression="execution(*  get*())"/>
<aop:around  pointcut-ref="allGetters" method="myAroundAdvice"/>
</aop:aspect>
</aop:config>
</beans>

No comments:

Post a Comment