package com.dineshonjava.Spring.Aop;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dineshonjava.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().setNameAndReturning("Dummy Circle return");
}
}
package com.dineshonjava.Spring.Aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import com.dineshonjava.Spring.Aop.model.Circle;
@Aspect
public class LoggingAspect {
public void loggingAdvice(JoinPoint joinpoint)
{
System.out.println("Run Advice..... get method Executed");
System.out.println(joinpoint.toString());
Circle c=(Circle)joinpoint.getTarget();
System.out.println(c.getName());
}
@AfterReturning(pointcut="args(name)",returning="returnString")
public void allStringMethodArguments(String name, String returnString){
System.out.println("A setter method has been executed............"+name);
}
@AfterThrowing(pointcut="args(name)",throwing="ex")
public void exceptionAdvice(String name, Exception ex){
System.out.println("Exception is thrown ............"+ex);
}
@After("args(String)")
public void afterAdvice(){
System.out.println("After Advice is executed...........");
}
}
package com.dineshonjava.Spring.Aop;
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.dineshonjava.Spring.Aop;
public class Triangle {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.dineshonjava.Spring.Aop;
import com.dineshonjava.Spring.Aop.model.Circle;
import com.dineshonjava.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;
}
public Circle getCircle() {
return circle;
}
public void setCircle(Circle circle) {
this.circle = circle;
}
}
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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 class="com.dineshonjava.Spring.Aop.model.Triangle" name="triangle">
<property name="name" value="triangle name">
</property></bean>
<bean class="com.dineshonjava.Spring.Aop.model.Circle" name="circle">
<!-- <property name="name" value="circle name"/> -->
</bean>
<bean class="com.dineshonjava.Spring.Aop.service.ShapeService" name="shapeService">
<property name="triangle" ref="triangle">
<property name="circle" ref="circle">
</property></property></bean>
<bean class="com.dineshonjava.Spring.Aop.Aspect.LoggingAspect" name="loggingAdvice">
</bean></aop:aspectj-autoproxy></beans>
package com.dineshonjava.Spring.Aop;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dineshonjava.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.dineshonjava.Spring.Aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import com.dineshonjava.Spring.Aop.model.Circle;
@Aspect
public class LoggingAspect {
public void loggingAdvice(JoinPoint joinpoint)
{
System.out.println("Run Advice..... get method Executed");
System.out.println(joinpoint.toString());
Circle c=(Circle)joinpoint.getTarget();
System.out.println(c.getName());
}
@AfterReturning(pointcut="args(name)",returning="returnString")
public void allStringMethodArguments(String name, String returnString){
System.out.println("A setter method has been executed............"+name);
}
@AfterThrowing(pointcut="args(name)",throwing="ex")
public void exceptionAdvice(String name, Exception ex){
System.out.println("Exception is thrown ............"+ex);
}
@After("args(String)")
public void afterAdvice(){
System.out.println("After Advice is executed...........");
}
@Pointcut("execution(* get*())")
public void allGetters(){}
@Around("allGetters()")
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.dineshonjava.Spring.Aop;
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.dineshonjava.Spring.Aop;
public class Triangle {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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 class="com.dineshonjava.Spring.Aop.model.Triangle" name="triangle">
<property name="name" value="triangle name">
</property></bean>
<bean class="com.dineshonjava.Spring.Aop.model.Circle" name="circle">
<!-- <property name="name" value="circle name"/> -->
</bean>
<bean class="com.dineshonjava.Spring.Aop.service.ShapeService" name="shapeService">
<property name="triangle" ref="triangle">
<property name="circle" ref="circle">
</property></property></bean>
<bean class="com.dineshonjava.Spring.Aop.Aspect.LoggingAspect" name="loggingAdvice">
</bean></aop:aspectj-autoproxy></beans>
Labels: Spring AOP, Spring3.0