Spring Aspect Oriented Programming is powerful feature of spring
Each application will have some global function/feature to do which applies for all/many/some of the objects depending on the requirement.
To achive such global function/feature spring AOP provides very powerful and effective way.
Basic Terms in AOP
1)Aspect - cross cutting concern ,something global feature of the application.
2)Join Point - point during the execution of the program such as method execution or exception handling code. in simple words the point where the cross cutting concerns can be applied
3)Advice - the Action taken at the join point. means implementation of any global feature/cross cutting feature.
4)Point cut - Expression which matches the exact join points.
Example program
below is the registration program which has the logic for registration.
![](data:image/png;base64,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)
below is the login program which has the login logic.
![](data:image/png;base64,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)
Now assume i want to have audit details where i want to store each action like register/login etc in some table.
Means basically , iwant to fire insert query to DB on execution of each of the above program.
so what could be done
without AOP, we can call insert query in each of the programs above.
but what if there are 100 such different actions/programs in our applications ?
we need to write insert query in 100 places or atleast we have to write 100 calls to that insert query
Now we will see how it can be achived very effectively using AOP.
Include following jars in the classpath
1)aspectjrt.jar
2)aspectjweaver.jar
3)cgilib.jar
4)aopalliance.jar
5)asm.jar
add following tag in spring configuration file ie beans.xml in our case
<aop:aspectj-autoproxy/> as follows
create a new service class to add the dependencies and name it has ApplicationService and is as below
![](data:image/png;base64,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)
Now write our Aspect as follows
![](data:image/png;base64,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)
now see because of the pointcut expression matched to any method inside com.kb package, our audit() method having insert query logic executes automatically without any of the call to this audit() method.
No matter how many methods will be , we can configure using pointcut and wildcard expression and we can make the call automatically without writing in any code in any of the method.
Now run the main program as below
![](data:image/png;base64,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)
output will be as follows
![](data:image/png;base64,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)
Observe that after user registration audit is called and after login also audit aspect is called automatically.
Thanks for Reading.
Each application will have some global function/feature to do which applies for all/many/some of the objects depending on the requirement.
To achive such global function/feature spring AOP provides very powerful and effective way.
Basic Terms in AOP
1)Aspect - cross cutting concern ,something global feature of the application.
2)Join Point - point during the execution of the program such as method execution or exception handling code. in simple words the point where the cross cutting concerns can be applied
3)Advice - the Action taken at the join point. means implementation of any global feature/cross cutting feature.
4)Point cut - Expression which matches the exact join points.
Example program
below is the registration program which has the logic for registration.
below is the login program which has the login logic.
Now assume i want to have audit details where i want to store each action like register/login etc in some table.
Means basically , iwant to fire insert query to DB on execution of each of the above program.
so what could be done
without AOP, we can call insert query in each of the programs above.
but what if there are 100 such different actions/programs in our applications ?
we need to write insert query in 100 places or atleast we have to write 100 calls to that insert query
Now we will see how it can be achived very effectively using AOP.
Include following jars in the classpath
1)aspectjrt.jar
2)aspectjweaver.jar
3)cgilib.jar
4)aopalliance.jar
5)asm.jar
add following tag in spring configuration file ie beans.xml in our case
<aop:aspectj-autoproxy/> as follows
create a new service class to add the dependencies and name it has ApplicationService and is as below
Now write our Aspect as follows
now see because of the pointcut expression matched to any method inside com.kb package, our audit() method having insert query logic executes automatically without any of the call to this audit() method.
No matter how many methods will be , we can configure using pointcut and wildcard expression and we can make the call automatically without writing in any code in any of the method.
Now run the main program as below
output will be as follows
Observe that after user registration audit is called and after login also audit aspect is called automatically.
Thanks for Reading.