Join point: A point during the execution of a program, such as the execution of a method or the handling of an exception. In Spring AOP, a join point always represents a method execution. Join point information is available in advice bodies by declaring a parameter of type org.aspectj.lang.JoinPoint.
We’ll now learn about join points, and how we can use arguments in the advice methods to get information about join points.
package com.dineshonjava.sdnext.aop.tutorial.aspectJ; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.dineshonjava.sdnext.aop.tutorial.aspectJ.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().setName("Dummy Circle"); System.out.println(service.getCircle().getName()); } }
package com.dineshonjava.sdnext.aop.tutorial.aspectJ; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import com.dineshonjava.sdnext.aop.tutorial.aspectJ.model.Circle; @Aspect public class LoggingAspect { @Before("allCircleMethods()") 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()); } // @Before("args(name)") // public void allStringMethodArguments(String name){ // // System.out.println("A setter method has been executed............"+name); // } @Before("args(String)") public void allStringMethodArguments(){ System.out.println("A setter method has been executed............"); } @Pointcut("within(com.venkat.Spring.Aop.model.*)") public void allCircleMethods(){} }
package com.dineshonjava.sdnext.aop.tutorial.aspectJ.model; public class Circle { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.dineshonjava.sdnext.aop.tutorial.aspectJ.model; public class Triangle { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.dineshonjava.sdnext.aop.tutorial.aspectJ.service; import com.dineshonjava.sdnext.aop.tutorial.aspectJ.model.Circle; import com.dineshonjava.sdnext.aop.tutorial.aspectJ.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.sdnext.aop.tutorial.aspectJ.model.Triangle" name="triangle"> <property name="name" value="triangle name"> </property></bean> <bean class="com.dineshonjava.sdnext.aop.tutorial.aspectJ.model.Circle" name="circle"> <property name="name" value="circle name"> </property></bean> <bean class="com.dineshonjava.sdnext.aop.tutorial.aspectJ.service.ShapeService" name="shapeService"> <property name="triangle" ref="triangle"> <property name="circle" ref="circle"> </property></property></bean> <bean class="com.dineshonjava.sdnext.aop.tutorial.aspectJ.Aspect.LoggingAspect" name="loggingAdvice"> </bean></aop:aspectj-autoproxy></beans>
Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…
Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…
Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…
Technology has emerged a lot in the last decade, and now we have artificial intelligence;…
Managing a database is becoming increasingly complex now due to the vast amount of data…
Overview In this article, we will explore Spring Scheduler how we could use it by…